python pandas 根据动态计算创建 dataframe

2024-06-17 11:45:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,并希望创建一个基于动态计算的第三个。你知道吗

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,并将此列命名为值(df1)\新名称(df2),对于产品B,减去值time=1和time=2等等)

目前,我可以通过一行一行地遍历df2,创建df1的多个子集,并最终连接它们来创建这个,但是这需要很长时间,因为df1可能会变得非常大


Tags: 数据namenewtime产品value动态prod
1条回答
网友
1楼 · 发布于 2024-06-17 11:45:14

你可以试着用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

相关问题 更多 >