在具有多级索引的 Pandas Dataframe 上执行 groupby 和滚动窗口会导致重复的索引条目

Pau*_*l H 6 python-2.7 pandas

如果我执行 groupby() 后跟具有多级索引的滚动 () 计算,则重复索引中的一个级别 - 最奇怪。我正在使用 Pandas 0.18.1

import pandas as pd
df = pd.DataFrame(data=[[1, 1, 10, 20], [1, 2, 30, 40], [1, 3, 50, 60],
                        [2, 1, 11, 21], [2, 2, 31, 41], [2, 3, 51, 61]],
                  columns=['id', 'date', 'd1', 'd2'])

df.set_index(['id', 'date'], inplace=True)
df = df.groupby(level='id').rolling(window=2)['d1'].sum()
print(df)
print(df.index)
Run Code Online (Sandbox Code Playgroud)

输出如下

id  id  date
1   1   1        NaN
        2       40.0
        3       80.0
2   2   1        NaN
        2       42.0
        3       82.0
Name: d1, dtype: float64
MultiIndex(levels=[[1, 2], [1, 2], [1, 2, 3]],
           labels=[[0, 0, 0, 1, 1, 1], [0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2]],
           names=[u'id', u'id', u'date'])
Run Code Online (Sandbox Code Playgroud)

奇怪的是 id 列现在在多索引中出现了两次。移动 ['d1'] 列选择没有任何区别。

任何帮助将非常感激。

谢谢保罗

jez*_*ael 5

这是错误

但是版本apply很好用,这个替代方案在这里(仅d1被移至apply):

df = df.groupby(level='id').d1.apply(lambda x: x.rolling(window=2).sum())
print(df)
id  date
1   1        NaN
    2       40.0
    3       80.0
2   1        NaN
    2       42.0
    3       82.0
Name: d1, dtype: float64
Run Code Online (Sandbox Code Playgroud)