【问题标题】:(Python) How to calculate the average over a time period?(Python)如何计算一段时间内的平均值?
【发布时间】:2021-08-05 17:36:39
【问题描述】:

我有一个数据框,我正在尝试添加一个新列来计算过去 3 天使用卡花费的平均金额。

我尝试过使用df[avg_card_7days] = df.groupby('card')['amount'].resample('3D', on = 'date').mean()

dataFrame 目前的样子:

card          date          amount
1             2/1/10        50
2             2/1/10        40
3             2/1/10        10
1             2/2/10        20
2             2/2/10        30
3             2/2/10        30
1             2/3/10        10
2             2/3/10        30
3             2/3/10        20
...

但我正在寻找这个结果:

card          date          amount     avg_card_3days
1             2/1/10        50         NaN
2             2/1/10        40         NaN
3             2/1/10        10         NaN
1             2/2/10        20         NaN 
2             2/2/10        30         NaN 
3             2/2/10        30         NaN 
1             2/3/10        10         26.26
2             2/3/10        30         33.33
3             2/3/10        20         20.00
...

任何帮助将不胜感激!

【问题讨论】:

    标签: python pandas datetime group-by


    【解决方案1】:
    df['date'] = pd.to_datetime(df.date, format='%m/%d/%y')
    df = df.set_index('date')
    df['avg_card_3days'] = df.groupby('card').expanding(3).amount.agg('mean').droplevel(0).sort_index()
    df = df.reset_index()
    df
    

    输出

        date    card    amount  avg_card_3days
    0   2010-02-01  1   50      NaN
    1   2010-02-01  2   40      NaN
    2   2010-02-01  3   10      NaN
    3   2010-02-02  1   20      NaN
    4   2010-02-02  2   30      NaN
    5   2010-02-02  3   30      NaN
    6   2010-02-03  1   10      26.666667
    7   2010-02-03  2   30      33.333333
    8   2010-02-03  3   20      20.000000
    

    说明 将date 列转换为datetime 类型并将其设置为索引。
    将df 按card 分组并找到rolling mean of 3 days 并将其分配给新列。
    重置索引以获得所需的输出。

    【讨论】:

    • 感谢您的帮助!我很感激。
    • nw,万事如意!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 2020-05-20
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多