熊猫:在按栏分组时获得滚动总和

时间:2015-11-18 23:13:27

标签: python pandas dataframe rolling-sum

我有一个看起来像

的pandas数据框
String[][] s2d = new String[c.length][c[0].length];

我如何获得这些价值的30天(或x天)滚动总和,这些价值由“姓名”中的任何人分发。柱?理想输出与当前数据帧具有相同的列,但不是将每行的值设置为该人当天的值,而是将其值与过去30天的值进行累计求和。

我知道我能做到

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)

获得整体滚动总和。但是,如何返回一个数据框,该数据框的滚动总和按照'名称'列?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

请注意,如果您不需要精确的时间窗口,或者您的数据集每[天,用户]有1行(这似乎是您的情况),那么pandas的标准groupby非常适合。见this very similar question

否则,例如:

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

应该有用。