3

複数のインデックスを持つデータフレームがあり、いくつかのデータのローリング合計を作成したいと考えていますが、インデックス内の各 ID に対してです。

たとえば、2 つのインデックス ( FirmYear ) があり、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 つよりも多くのインデックス (会社、労働者、国、年) があるため)

ありがとう、

エイドリアン

4

1 に答える 1

4

オプション1

mydf.unstack(0).rolling(2).sum().stack().swaplevel(0, 1).sort_index()

ここに画像の説明を入力

オプション 2

mydf.groupby(level=0, group_keys=False).rolling(2).sum()

ここに画像の説明を入力

于 2016-08-13T06:32:26.080 に答える