繁体   English   中英

(Python)如何计算一段时间内的平均值?

[英](Python) How to calculate the average over a time period?

我有一个 dataFrame 并且我正在尝试添加一个新列来计算过去 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
...

任何帮助将不胜感激!

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

Output

    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时间类型并将其设置为索引。
carddf进行分组并找到rolling mean of 3 days并将其分配给新列。
重置索引以获得所需的 output。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM