![](/img/trans.png)
[英]Update pandas dataframe column with another column in another dataframe on index overlap
[英]Pandas: update a column based on index in another dataframe
我想使用另一个df中的一个乘数来更新数据帧中的几列(两个dfs都有一个“ KEY”列)。 尽管我能够做到这一点,但由于我有几百万条记录,因此需要花费大量的处理时间。 寻找更优化的解决方案(如果有)。
让我解释一下使用虚拟dfs的情况。 我有一个数据框df1如下
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
现在我想改变col2
和col3
由我从下面取出一个因素 df2
根据数据帧KEY
。
In [11]: df2
Out[11]:
FACTOR
KEY
1 100
2 3000
3 1000
4 200
5 50
我正在使用下面的for循环来实现我所需要的。
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秒才能完成。 我正在寻找更好的解决方案,因为for循环似乎是在O(n)
复杂度中做到的
您应该使用合并:
c=df1.merge(df2,on="KEY")
c数据框现在将包含“ FACTOR”列,这是您要获得的结果
如果要合并的字段之一是索引,则可以使用:
c=df1.merge(df2,left_on="KEY",right_index=True)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.