Python:在数据透视表上应用滚动求和

Python:在数据透视表上应用滚动求和,python,python-3.x,pandas,Python,Python 3.x,Pandas,我使用pivot_table命令创建了一个数据框。数据框有351行和120列。数据框如下所示: RY 2011 ... 2020 Month 1 2 3 4 5 6 7 8 9 10 ... 3 4 5 6 7 8 9 10 11 12 ID

我使用pivot_table命令创建了一个数据框。数据框有351行和120列。数据框如下所示:

RY          2011                                              ...   2020
Month   1   2   3   4   5   6   7   8   9   10  ... 3   4   5   6   7   8   9   10  11  12
ID                                                                                  
AB10    0   0   0   0   0   0   0   0   0   0   ... 0   0   0   0   0   0   0   0   0   0
AB1286  0   0   0   0   2   0   0   0   0   0   ... 0   0   0   0   0   0   0   0   0   0
AB1951  0   0   0   0   0   0   0   0   0   0   ... 0   0   0   0   0   0   0   0   0   0
AB2 0   0   0   0   0   0   0   0   0   0   ... 0   0   0   0   0   0   0   0   0   0
AB2338  0   0   0   0   0   0   0   0   0   0   ... 0   0   0   0   0   0   0   0   0   0
现在我想计算ID的12个月滚动总和。我编写了以下命令来计算滚动总和:

df.groupby('ID').rolling(12,on='Month').sum()
但是,它给出了以下错误:

ValueError: invalid on specified as Month, must be a column (of DataFrame), an Index or None
有人能帮我解决这个问题吗?

在创建透视表之前,请尝试运行该代码。但是,请确保首先创建一个datetime列,其中包含以下内容:

df['Date']=pd.to_datetime(df['Year'].astype(str)+'-'+df['Month'].astype(str)+'-01')

然后:

df.groupby('ID').rolling(12,on='Date').sum()

“ID”包含什么?您是否尝试过使用转换透视表

df.T.groupby('ID').rolling(12,on='Month').sum()

您最初的
pandas.DataFrame
列是什么样子的?是不是
[“年”、“月”、“ID”、“值”]
?使用该布局获得所需结果可能更简单。@AlexFortin Yes实际数据帧为[“年”、“月”、“ID”、“值”]。我转换成透视表的原因是我想得到2011年到2020年的滚动总和。很少有ID在几年内没有数据,或者monthI喜欢您将年和月转换为日期的想法。但是,我仍然需要创建pivot_表。因为,很少有ID可能没有某个日期的数据。所以为了避免丢失详细信息,我想创建pivot选项卡。在我运行第二个命令时,在ID和日期上创建透视表后,它会抛出此错误“指定为日期时无效,必须是(DataFrame的)列、索引或无”,您可能必须使用
pd.MultiIndex.from_product()