【问题标题】:Apply a pandas window function to a reversed MultiIndex level?将熊猫窗口函数应用于反转的 MultiIndex 级别?
【发布时间】:2018-03-28 19:49:46
【问题描述】:

我需要对 MultiIndex DataFrame 进行.expanding 计算。但我需要它反向运行。这是一个示例 DataFrame:

np.random.seed(456)
j = [(a, b) for a in ['A','B','C'] for b in pd.date_range('2018-01-01', periods=5, freq='W')]
i = pd.MultiIndex.from_tuples(j, names=['Name','Num'])
df = pd.DataFrame(np.random.randn(15), i, columns=['Vals'])
df.loc[df['Vals'] < 0] = np.nan

下面是我想要对每个 0 级索引值执行的操作的示例:

k = df.loc['A']
k['Missing'] = k[::-1].isnull().expanding().sum() # Expanding-sum on reversed level-1

这会为那个顶级值'A' 产生正确的结果:

                Vals  Missing
Num                          
2018-01-07       NaN      2.0
2018-01-14       NaN      1.0
2018-01-21  0.618576      0.0
2018-01-28  0.568692      0.0
2018-02-04  1.350509      0.0

但是如何将它应用于所有顶级索引值,以便我可以设置df['Missing'] =

我正在尝试df.groupby('Name')[::-1].isnull().expanding().sum() 形式的东西......但我无法获得允许反转一级索引以进行计算的函数形式。

执行此操作的熊猫表达式是什么?

【问题讨论】:

    标签: pandas dataframe pandas-groupby multi-index


    【解决方案1】:

    知道了:分组后,我们必须在处理内部集之前从 MultiIndex 中剥离顶层:

    df['Missing'] = df.groupby('Name').apply(
            lambda x: x.reset_index(level=0, drop=True)[::-1].isnull().expanding().sum()
        )
    

    即,我们groupby('Name'),然后对于每个组,lambda 表达式通过.reset_index(level=0, drop=True) 剥离级别 0 索引,此时我们可以以相反的顺序使用剩余的 DataFrame:x[::-1]

    【讨论】:

      猜你喜欢
      • 2018-02-09
      • 2018-11-13
      • 1970-01-01
      • 2021-03-01
      • 2021-12-11
      • 2021-05-26
      • 2014-05-11
      相关资源
      最近更新 更多