1

我有一个看起来像的熊猫数据框

Name    Date               Value
Sarah   11-01-2015         3
Sarah   11-02-2015         2
Sarah   11-03-2015         27
Bill    11-01-2015         42
Bill    11-02-2015         5
Bill    11-03-2015         15
.... (a couple hundred rows)

如何获得“名称”列中的任何人分解的这些值的 30 天(或 x 天)滚动总和?理想的输出将具有与当前数据框相同的列,但不是将每一行的值作为该人当天的值,而是将其在过去 30 天内的值的累积总和。

我知道我能做到

result = pd.rolling_sum(df, 30)

获得整体的滚动总和。但是如何返回一个按“名称”列分组的滚动总和的数据框?

4

2 回答 2

1

使用 grigri group_resample 函数解决了这个问题。

df = group_resample(df,date_column='Date',groupby=group_by,value_column='Value',how='sum',freq='d')
df = df.unstack(group_by).fillna(0)
result = pd.rolling_mean(df,30)
于 2015-11-19T01:05:20.940 回答
0

请注意,如果您不需要精确的时间窗口,或者您的数据集每个 [day , user] 有 1 行(这似乎是您的情况),那么 pandas 的标准 groupby 非常适合。看到这个非常相似的问题

否则,类似:

df.groupby('Name').rolling('30D', on="Date").Value.sum()

应该管用。

于 2018-03-21T15:06:49.530 回答