迭代一个滚动的总和

时间:2013-08-12 01:52:08

标签: python pandas dataframe

我有 pandas 数据框

from pandas import DataFrame, Series

其中每行对应一个案例,每列对应一个月。我想在每12个月期间执行滚动金额。看起来很简单,但我已经陷入了

result = [x for x.rolling_sum(12) in df.iterrows()]
result = [x for x.rolling_sum(12) in df.T.iteritems()]    

SyntaxError:无法分配给函数调用

a = []
for x in df.iterrows():
    s = x.rolling_sum(12)
    a.append(s)

AttributeError:'tuple'对象没有属性'rolling_sum'

1 个答案:

答案 0 :(得分:3)

我想也许你正在寻找的是

pd.rolling_sum(df, 12, axis=1)

在这种情况下,不需要列表理解。 axis=1参数会导致Pandas计算df的滚动总和。

例如,

import numpy as np
import pandas as pd
ncols, nrows = 13, 2
df = pd.DataFrame(np.arange(ncols*nrows).reshape(nrows, ncols))
print(df)
#    0   1   2   3   4   5   6   7   8   9   10  11  12
# 0   0   1   2   3   4   5   6   7   8   9  10  11  12
# 1  13  14  15  16  17  18  19  20  21  22  23  24  25

print(pd.rolling_sum(df, 12, axis=1))

打印

   0   1   2   3   4   5   6   7   8   9   10   11   12
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN   66   78
1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN  222  234

关于列表理解:

你有错误顺序的列表理解部分。尝试:

result = [expression for x in df.iterrows()]

有关列表推导的更多信息,请参阅the docs

列表理解的基本形式是

[expression for variable in sequence]

在Python执行后,结果列表等同于result

result = []
for variable in sequence:
    result.append(expression)

有关列表推导的完整语法,请参阅this link