如何为Pandas多级索引DataFrame添加‘Other’汇总行
实现MultiIndex DataFrame的分组保留前2行并汇总其余行
完整代码实现
import pandas as pd # 构造示例数据 df = pd.DataFrame() df["Idx1"] = ["A", "A", "A", "A", "B", "B", "B", "B"] df["Idx2"] = ["X", "Y", "Z", "Q", "X", "Y", "Z", "Q"] df["Values"] = [1,2,3,4, 1,2,3,4] df = df.set_index(["Idx1", "Idx2"]) # 1. 提取每个一级索引下的前2行 top2_rows = df.groupby(level=0).head(2) # 2. 筛选剩余行并汇总为"Other" remaining_rows = df.loc[df.index.difference(top2_rows.index)] other_rows = remaining_rows.groupby(level=0).sum().rename(index=lambda x: (x, "Other"), level=[0,1]) # 3. 合并结果并按索引排序 final_result = pd.concat([top2_rows, other_rows]).sort_index(level=0) print(final_result)
代码解释
- 提取前2行:使用
groupby(level=0).head(2)直接获取每个一级索引(Idx1)下的前2条记录,和你已实现的逻辑一致。 - 处理剩余行:
- 通过
df.index.difference(top2_rows.index)筛选出未被保留的行索引,定位剩余数据。 - 对剩余行按一级索引分组求和,再用
rename将二级索引替换为"Other",保证MultiIndex结构统一。
- 通过
- 合并结果:用
pd.concat拼接前2行和汇总的Other行,最后sort_index确保每个一级索引下的记录顺序统一。
输出结果
Values Idx1 Idx2 A X 1 Y 2 Other 7 B X 1 Y 2 Other 7
内容的提问来源于stack exchange,提问作者Merger
相关产品推荐
相关产品推荐

