sil*_*cer 6 python dataframe pandas
我在pandas中有一个多索引数据框,其中index是ID和时间戳.我希望能够计算每个ID的时间序列滚动总和,但我似乎无法弄清楚如何在没有循环的情况下完成它.
content = io.BytesIO("""\
IDs timestamp value
0 2010-10-30 1
0 2010-11-30 2
0 2011-11-30 3
1 2000-01-01 300
1 2007-01-01 33
1 2010-01-01 400
2 2000-01-01 11""")
df = pd.read_table(content, header=0, sep='\s+', parse_dates=[1])
df.set_index(['IDs', 'timestamp'], inplace=True)
pd.stats.moments.rolling_sum(df,window=2
Run Code Online (Sandbox Code Playgroud)
而这个输出是:
value
IDs timestamp
0 2010-10-30 NaN
2010-11-30 3
2011-11-30 5
1 2000-01-01 303
2007-01-01 333
2010-01-01 433
2 2000-01-01 411
Run Code Online (Sandbox Code Playgroud)
注意边缘处的ID 0和1以及1和2之间的重叠(我不希望这样,弄乱我的计算).解决此问题的一种可能方法是在ID上使用groupby,然后循环遍历该groupby,然后应用rolling_sum.
我确信有一个函数可以帮助我在不使用循环的情况下执行此操作.
首先分组,然后滚动总和(也rolling_sum
可以在顶级命名空间中使用)
In [18]: df.groupby(level='IDs').apply(lambda x: pd.rolling_sum(x,2))
Out[18]:
value
IDs timestamp
0 2010-10-30 NaN
2010-11-30 3
2011-11-30 5
1 2000-01-01 NaN
2007-01-01 333
2010-01-01 433
2 2000-01-01 NaN
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5261 次 |
最近记录: |