4

ファンシーインデックスでフィルタリングした後、変更をパンダデータフレームにマージする最も簡単な方法は何ですか?

たとえば、2 つの列 x と y を持つデータフレームを定義し、x が偶数の整数であるすべての行を選択してから、y の対応する値を 0 に設定します。

d = pd.DataFrame({'x':range(10), 'y':range(11,21)})
d[d.x % 2 == 0]['y'] = 0

「派手なインデックス作成」ブールクエリはデータフレームのコピーを作成するため、変更が元のデータフレームに反映されることはありません。この操作を実行するより良い方法はありますか?

私の現在の解決策は、ファンシーブールインデックスに基づいて一時データフレーム w を定義し、w で 'y' の対応する値を 0 に設定し、インデックスを使用して w を d にマージすることです。これを行うには、より効率的な (できればより直接的な) 方法が必要です。

w = d[d.x % 2 == 0]
w.y = 0
4

1 に答える 1

3

DataFrame.ix[] を使用します。

In [21]: d
Out[21]: 
   x   y
0  0  11
1  1  12
2  2  13

In [22]: d.ix[d.x % 2 == 0, 'y'] = -5

In [23]: d
Out[23]: 
   x   y
0  0  -5
1  1  12
2  2  -5
于 2013-01-12T17:02:22.113 に答える