python - 在 Pandas 的多索引数据帧上使用滚动函数

标签 python pandas dataframe

我在 pandas 中有一个多索引数据框,其中索引在 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

输出是:

                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

请注意 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

关于python - 在 Pandas 的多索引数据帧上使用滚动函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19188217/

相关文章:

python - 如何从大型文本文件中一次性删除大量短语?

python - 如何调试通过单元测试部分覆盖但在重用时产生错误结果的 Python 代码?

python - 使用列表从 Pandas 数据框中选择单个值

python - 如何对数据框中某些列和行的数据求和?

apache-spark - Spark : Extract dataframe from logical plan

python - 合并 Pandas 中的重复行

javascript - 使用数组在 amcharts.js 中创建 "normal"折线图?

python - 禁用每个应用程序由 GTK 主题定义的像素图背景

python-3.x - 从冗余二进制数据集创建多标签数据集以进行多标签分类

python - 如何从索引匹配一天获取全天数据