我想使用另一个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)
复杂度
答案 0 :(得分:0)
你应该使用合并:
c=df1.merge(df2,on="KEY")
c数据帧现在将包含“FACTOR”列,这是您想要实现的结果
如果要合并的某个字段是索引,则可以使用:
c=df1.merge(df2,left_on="KEY",right_index=True)