如何提取Pandas多级索引DataFrame中每个id组的首行数据?
多级索引DataFrame提取分组首行的解决方案
针对你给出的多级索引DataFrame,要提取每个id分组的第一行数据,以下是几种可行的方法:
方法1:按第一级索引分组取首行(最稳妥)
如果不确定每个id下的第一行对应的id2值,直接通过groupby按id分组后取每组首行:
import pandas as pd new_df = df.groupby(level='id').first()
执行后会得到每个id对应的首行数据,结果索引为id,保留原数据列。如果需要保留原多级索引结构,可改用:
new_df = df.groupby(level='id').nth(0)
方法2:直接通过多级索引定位(适用于首行id2固定为1的场景)
你的数据中每个id的首行id2都是1,可直接用loc按层级匹配:
new_df = df.loc[(slice(None), 1), :]
这里slice(None)表示匹配第一级索引的所有值,第二级索引指定为1,精准提取目标行。
方法3:用xs方法提取
通过xs(cross-section)方法指定多级索引的取值:
# 获取所有唯一的id值 unique_ids = df.index.get_level_values('id').unique() # 遍历提取并合并 new_df = pd.concat([df.xs((id_val, 1), level=['id', 'id2']) for id_val in unique_ids], axis=1).T
内容的提问来源于stack exchange,提问作者Feng Hu
相关产品推荐
相关产品推荐

