pandas split-apply-combine 创建不需要的多重索引

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

我正在 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。因此 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?

最佳答案

这里使用 apply 更容易,这样你就可以得到一个 bool 数组:

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

   A  B
0  1  2
1  3  4

关于pandas split-apply-combine 创建不需要的多重索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64959374/

相关文章:

python - Pandas:转置、分组和汇总列

python - 使用分层索引更新数据框

python - 如何在保持 Dataframe 结构的同时计算 %

python - 将刻度数据转换为 OHLCV 烛台数据

python - IX 上的 Pandas Cache 值是否调用?

r - 将事件级数据集转换为 r 中的患者级数据

python - 对 Pandas DataFrame 列表求和

python - 过滤 Pandas 行,其中列中的第一个字母是/不是某个值

python - 根据条件对某些组进行转换创建新列

python - 在列表组件列表中明智地添加或减去元素