我有 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'
答案 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。