python pandas基于动态计算创建数据框

时间:2019-06-26 18:35:32

标签: python pandas dataframe dynamic

我有两个数据框,并希望基于动态计算创建第三个数据框。

df1(拥有)

prod time value
A    1    10
A    2    20
A    3    30
B    1    15
B    2    20
B    3    80

df2(拥有)

prod time1 time2 new_name
A    1     3    'newval'
B    1     2    'newval'
A    1     2    'newval2'
B    1     3    'newval2'

df3(想要)

prod value_newval value_newval2 
A    -20            -10
B    -5             -65

想要以有效的方式创建df3。 df2中的每个记录指示如何计算df3(即,对于产品A,从df1中减去值time = 1和time = 3,并将此列命名为value(df1)_new_name(df2),对于产品B,将其减去time = 1和时间= 2等)

目前,我能够通过逐行浏览df2并创建df1的多个子集并最终将它们连接起来来创建此文件,但是如果df1变得非常大,这将花费很长时间

1 个答案:

答案 0 :(得分:1)

您可以先尝试melt,然后再尝试merge + groupby

df2.drop('new_name',1).melt('prod',value_name='time').\
      merge(df1,how='left').groupby('prod').value.apply(lambda x : x.iloc[0]-x.iloc[1])
Out[177]: 
prod
A   -20
B    -5
Name: value, dtype: int64

更新

df2.melt(['prod','new_name'],value_name='time').\
      merge(df1,how='left').groupby(['prod','new_name']).value.apply(lambda x : x.iloc[0]-x.iloc[1]).unstack()
Out[205]: 
new_name  'newval'  'newval2'
prod                         
A              -20        -10
B               -5        -65