データフレーム内の複数の列を、別のdf(両方のdfsに 'KEY'列があります)に乗算係数を使用して更新します。これを達成することはできましたが、数百万のレコードがあるので、処理時間がかかります。もしあれば、より最適なソリューションを探してください。Pandas:別のデータフレームのインデックスに基づいて列を更新する
ダミーdfsを使用して私のシナリオを説明しましょう。私は今、私はKEY
に基づいて、以下のdf2
データフレームからフェッチ要因によってcol2
とcol3
を変更したい
In [8]: df1
Out[8]:
KEY col2 col3 col4
0 1 1 10 5
1 2 7 13 8
2 1 12 15 12
3 4 3 23 1
4 3 14 5 6
以下のようにデータフレームDF1を持っています。
In [11]: df2
Out[11]:
FACTOR
KEY
1 100
2 3000
3 1000
4 200
5 50
私は必要なものを達成するために以下のループを使用しています。
In [12]: for index, row in df2.iterrows():
df1.loc[(df1['KEY']==index), ['col2', 'col3']] *= df2.loc[index]['FACTOR']
In [13]: df1
Out[13]:
KEY col2 col3 col4
0 1 100 1000 5
1 2 21000 39000 8
2 1 1200 1500 12
3 4 600 4600 1
4 3 14000 5000 6
これは機能します。しかし、私の実際のデータには数百万のレコードがリアルタイムで入っており、入ってくるデータの各バッチを完了するまでに約15秒かかります。
c=df1.merge(df2,on="KEY")
Cのデータフレームは、今ある「FACTOR」の列が含まれます:forループマージを使用する必要があります
感謝。しかし、私が望んでいたのは、単に "Factor"をマージするのではなく、キーに基づいてdf1の列を掛けることでした。しかし、これは私が2つのステップで私が欲しいものを達成できるという考えを私に与えました。最初にマージして、2つの列に 'multiply'関数を使って最終出力を取得します。 – MattO
そして私は自分の問題に対処するための良いアイデアを+1しましたが、今は私が望む1つのラインとは違って2つのステップが必要です。ありがとう@WNG – MattO