【问题标题】:python pandas create dataframe based on dynamic calculationpython pandas基于动态计算创建数据框
【发布时间】:2019-11-08 18:33:27
【问题描述】:

我有两个数据框,想根据动态计算创建第三个。

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(即对于 prod A,从 df1 中减去 value time=1 和 time=3 并将此列命名为 value(df1)_new_name(df2),对于 prod B,减去 time=1 和 time =2 等)

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

【问题讨论】:

    标签: python pandas dataframe dynamic


    【解决方案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
    

    【讨论】:

    • 能否更新以在 df2 中包含其他记录?编辑问题
    猜你喜欢
    • 1970-01-01
    • 2021-11-28
    • 2021-05-05
    • 1970-01-01
    • 2019-06-28
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    相关资源
    最近更新 更多