繁体   English   中英

熊猫:根据另一个数据框中的索引更新列

[英]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

现在我想改变col2col3由我从下面取出一个因素 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM