我有一个看起来像
的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)
获得整体滚动总和。但是,如何返回一个数据框,该数据框的滚动总和按照'名称'列?
答案 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()
应该有用。