选择多索引组中的第一个子组

2024-04-25 01:41:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有两级索引的熊猫数据帧。对于每个级别1索引,我要选择第一个级别2索引记录

df = pd.DataFrame({'Person': [1, 1, 1, 2, 2, 2, 3, 3, 3], 
    'Year': ['2020','2020', '2019','2019','2019','2018', '2019','2018','2017'],'class':list('AISAAIASS'),
                  'val': randint(0, 10, 9)})
df

Person  Year class val
0   1   2020    A   8
1   1   2020    I   7
2   1   2019    S   6
3   2   2019    A   8
4   2   2019    A   1
5   2   2018    I   2
6   3   2019    A   0
7   3   2018    S   6
8   3   2017    S   8

我想要2020年(年度)记录中的第1人(第2名),2019年记录中的第2人(第2名),2019年记录中的第3人(第1名)

我查了很多密码,仍然找不到答案。有简单的方法吗


Tags: 数据密码dataframedf记录val级别year
1条回答
网友
1楼 · 发布于 2024-04-25 01:41:23

使用^{}^{}作为第一个MultiIndex值,然后按^{}过滤:

np.random.seed(2020)
df = pd.DataFrame({'Person': [1, 1, 1, 2, 2, 2, 3, 3, 3], 
                  'Year': ['2020','2020', '2019','2019','2019','2018', '2019','2018','2017'],
                  'class':list('AISAAIASS'),
                  'val': np.random.randint(0, 10, 9)}).set_index(['Person','Year'])

idx = df.index[~df.index.get_level_values(0).duplicated()]
df1 = df[df.index.isin(idx)]

或通过第一级^{}获取第一个索引值:

df1 = df[df.index.isin(df.groupby(['Person']).head(1).index)]

print (df1)
            class  val
Person Year           
1      2020     A    0
       2020     I    8
2      2019     A    6
       2019     A    3
3      2019     A    7

相关问题 更多 >