私はpython 2.7、pandas(バージョン0.18.1)のデータフレームに取り組んでいます。 同じデータフレーム内の複数の列に基づいてデータフレームの列を変更する必要があります。 以下のサンプル・データがIterrowsの性能
data
を下回るようなものであると私は私のコードを書かれていることについては
私のサンプルデータが
+---+---+----+----+---+---------+---+----+----+---+----------+
| a | b | c | d | e | f | g | h | i | j | discount |
+---+---+----+----+---+---------+---+----+----+---+----------+
| 0 | | | | | 65497.6 | | | | | 0 |
| 0 | | | | | 73882.8 | | | | | 0 |
| 0 | | | | | 88588 | | 22 | | | 0 |
| 0 | | | | | 106480 | | 20 | 10 | | 0 |
| 0 | | | | | 52500 | | | | | 0 |
| 0 | | 20 | 10 | | 22997.5 | | | | | 0 |
| | | | | | | | | | | 0 |
| 0 | | | 20 | | 0 | | | | | 0 |
| 0 | | | | | 10520 | | | | | 0 |
+---+---+----+----+---+---------+---+----+----+---+----------+
のようなもので、私のコードは
以下のようなものです私のデータフレームであります
columns1 = ['a','b','c','d','e']
columns2 = ['f','g','h','i','j']
data['discount'] = 0
for i, row in data.iterrows():
a = 0
b = 0
for col1 in columns1 :
value = row[col1]
if value > 0:
a = value
break;
for col2 in columns2 :
value = row[col2]
if value > 0:
b = value
break;
if(a != 0 and b != 0):
data.loc[i, 'discount'] = abs(a-b)
私がやっているようにこの方法では、大量のデータセットに多くの時間とメモリが必要です。私は700メガバイトのデータを持っています。これは処理するのに120GB以上のRAMが必要です。処理が約10時間後に処理されています。Memory Error
このように使用しないでください。どうすればいいですか?私はこのコードをより効率的に書いています。
私はNaN
値は、これはあなたのグループのために、各行の最初の非NA値を与え、あなたの空のセルを想定し
は、データのサンプルを提供してください。 – piRSquared