Python 熊猫:具有多个索引的滚动总和(即面板数据)

Python 熊猫:具有多个索引的滚动总和(即面板数据),python,pandas,panel,multi-index,rolling-sum,Python,Pandas,Panel,Multi Index,Rolling Sum,我有一个具有多个索引的数据框架,并且希望为索引中的每个id创建一些数据的滚动总和 例如,假设我有两个索引(公司和年份),我有一些名为zdata的数据。工作示例如下所示: import pandas as pd # generating data firms = ['firm1']*5+['firm2']*5 years = [2000+i for i in range(5)]*2 zdata = [1 for i in range(10)] # Creating the dataframe

我有一个具有多个索引的数据框架,并且希望为索引中的每个id创建一些数据的滚动总和

例如,假设我有两个索引(公司和年份),我有一些名为zdata的数据。工作示例如下所示:

import pandas as pd

# generating data
firms = ['firm1']*5+['firm2']*5
years = [2000+i for i in range(5)]*2
zdata = [1 for i in range(10)]

# Creating the dataframe
mydf  = pd.DataFrame({'firms':firms,'year':years,'zdata':zdata})

# Setting the two indexes
mydf.set_index(['firms','year'],inplace=True)

print(mydf)
             zdata
firms year       
firm1 2000      1
      2001      1
      2002      1
      2003      1
      2004      1
firm2 2000      1
      2001      1
      2002      1
      2003      1
      2004      1
现在,我想为每家公司重新计算一个滚动金额。但是,如果我输入

new_rolling_df=mydf.rolling(window=2).sum()

print(new_rolling_df)
              zdata
  firms year       
  firm1 2000    NaN
        2001    2.0
        2002    2.0
        2003    2.0
        2004    2.0
  firm2 2000    2.0
        2001    2.0
        2002    2.0
        2003    2.0
        2004    2.0
它不考虑多重指数,只做一个正常的滚动和。每个人都知道我应该怎么做(特别是因为我的索引超过2个(公司、工人、国家、年份)

谢谢

阿德里安选项1

选项2


非常感谢!我将使用第二种解决方案,因为它需要太多内存才能解开我的大数据帧。快速评论,你能解释一下“级别=0”吗。数字0指的是什么?特别是因为我想用更多的索引来复制它。级别0是索引的第一级。如果按索引分组,即使只有一个级别,也必须指定级别。而且,这是告诉groupby我要按索引级别分组的唯一方法。@piRSquared-谢谢你提供的信息,哈我很难让它正常工作。对我来说(我想)是组键修复了它。你能解释一下它的作用吗?没有这个,我有一列NaNs。再次感谢你!
mydf.unstack(0).rolling(2).sum().stack().swaplevel(0, 1).sort_index()
mydf.groupby(level=0, group_keys=False).rolling(2).sum()