【问题标题】:lags with calculation and groupby a column计算滞后并按列分组
【发布时间】:2020-11-06 13:22:09
【问题描述】:

我在下面有一个数据框。我正在尝试通过计算为 var1、var2、var3 创建滞后 (var_n/ lag2(var_n))-2 (n 为 1,2,3)

以下代码适用于 lag2。但我需要执行按“grp”分组的计算

代码:

滞后=[2]

df=pd.concat([df]+[df.groupby('grp'['var1','var2','var3'].shift(x).add_prefix('lag'+str(x) ) for x in lag],axis=1)

我在下面尝试了另一种方法,但我无法应用分组方式:

同比 = [12]

columns_y = df.loc[:, 'var1':'var3']

对于columns_y.columns中的col:

for x in yoy: 
    columns_y.loc[:,col+"_yoy"] =(columns_y[col]/(columns_y[col].shift(x)))-1

【问题讨论】:

    标签: python python-3.x pandas pandas-groupby


    【解决方案1】:

    试试这个

    df = pd.DataFrame({
        'grp':['a','a','a','b','b','b'],'abc2':['l','m','n','p','q','r'], 'abc3':['x','y','z','a','b','c'],
        'var1':[20,30,20,40,50,90],'var2':[50,80,70,20,30,40],'var3':[50,80,70,20,30,40]})
    
    lag = [2]
    lags_df = pd.concat([
        df.groupby('grp')[[f'var{i+1}' for i in range(3)]]
        .shift(x)
        .add_prefix(f'lag{x}_')
        for x in lag
    ], axis=1)
    print(pd.concat([df, lags_df], axis=1))
    

    输出

      grp abc2 abc3  var1  var2  var3  lag2_var1  lag2_var2  lag2_var3
    0   a    l    x    20    50    50        NaN        NaN        NaN
    1   a    m    y    30    80    80        NaN        NaN        NaN
    2   a    n    z    20    70    70       20.0       50.0       50.0
    3   b    p    a    40    20    20        NaN        NaN        NaN
    4   b    q    b    50    30    30        NaN        NaN        NaN
    5   b    r    c    90    40    40       40.0       20.0       20.0
    

    【讨论】:

    • 下面的代码对我有用,但我无法为 column_y 中的 col 应用 group by yoy = [12] columns_y = df.loc[:, 'var1':'var3']。列:对于 x in yoy:columns_y.loc[:,col+"_yoy"] = (columns_y[col]/(columns_y[col].shift(x)))-1
    猜你喜欢
    • 2019-09-05
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 2023-02-25
    • 2021-07-07
    • 2022-07-06
    • 1970-01-01
    相关资源
    最近更新 更多