【问题标题】:pandas split-apply-combine creates undesired MultiIndexpandas split-apply-combine 创建了不需要的 MultiIndex
【发布时间】:2023-09-18 23:49:01
【问题描述】:

我在 pandas 中使用 split-apply-combine 模式通过自定义聚合函数对我的 df 进行分组。 但这会返回一个不需要的 DataFrame,其分组列存在两次:在 MultiIndex 和列中。

以下是我的问题的简化示例。

说,我有这个 df

df = pd.DataFrame([[1,2],[3,4],[1,5]], columns=['A','B']))

   A  B
0  1  2
1  3  4
2  1  5

我想按 A 列分组,只保留 B 具有偶数值的那些行。因此,所需的 df 是这样的:

   B
A        
1  2
3  4

自定义函数 my_combine_func 应该进行过滤。但是在 groupby 之后应用它会导致 MultiIndex 与前一个 Index 在第二级。因此列 A 存在两次。

my_combine_func = group[group['B'] % 2 == 0]

df.groupby(['A']).apply(my_combine_func)

     A  B
A        
1 0  1  2
3 1  3  4

如何应用自定义组函数并获得所需的df?

【问题讨论】:

    标签: pandas dataframe pandas-groupby split-apply-combine


    【解决方案1】:

    在这里使用apply 更容易,因此您可以返回一个布尔数组:

    df[df.groupby('A')['B'].apply(lambda x: x % 2 == 0)]
    
       A  B
    0  1  2
    1  3  4
    

    【讨论】: