Pandas:根据另一个数据帧中的索引更新列

时间:2017-10-25 12:00:16

标签: python pandas 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数据框中提取的因子更改df2KEY

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)复杂度

中进行的

1 个答案:

答案 0 :(得分:0)

你应该使用合并:

c=df1.merge(df2,on="KEY")

c数据帧现在将包含“FACTOR”列,这是您想要实现的结果

如果要合并的某个字段是索引,则可以使用:

c=df1.merge(df2,left_on="KEY",right_index=True)