gpt4 book ai didi

python - 如何在Groupby中保留其他列的行值?

转载 作者:太空宇宙 更新时间:2023-11-03 13:25:41 25 4
gpt4 key购买 nike

我有一个数据框:

df = pd.DataFrame()
df['bird'] = ['shikra','shikra','eagle','eagle','eagle','crow','sparrow','sparrow']
df['bird2'] = [1,1,2,2,2,3,4,4]
df['n'] = ['a','b','c','d','e','f','g','h']
df['range'] = [1400,1600,np.nan,2800,3300,np.nan,800,600]

bird bird2 n range
0 shikra 1 a 1400.0
1 shikra 1 b 1600.0
2 eagle 2 c NaN
3 eagle 2 d 2800.0
4 eagle 2 e 3300.0
5 crow 3 f NaN
6 sparrow 4 g 800.0
7 sparrow 4 h 600.0

我想从 about 数据中找到最大射程的前 2 只鸟。

我使用 groupby 操作如下:

df.groupby(['bird','bird2']).agg({'range':'max', 'n':'first'}).reset_index().sort_values('range', ascending=False).head(2)

输出为:

    bird    bird2   range   n
1 eagle 2 3300.0 c
2 shikra 1 1600.0 a

以上输出的唯一问题是第 n 列。因为我在 agg 中选择了 first 它为相应的 groupby 值提供了第一个值,但实际上我想要的是与最大值相关的 n 的值范围。

如何从 n 列中选择值,其中 rangemax

预期输出:

    bird    bird2   range   n
1 eagle 2 3300.0 e
2 shikra 1 1600.0 b

最佳答案

使用DataFrame.sort_values首先,然后按 DataFrame.drop_duplicates 删除两列的重复项 |并通过 DataFrame.head 选择最高值或 DataFrame.iloc :

df = df.sort_values('range', ascending=False).drop_duplicates(['bird','bird2']).head(2)

#df = df.sort_values('range', ascending=False).drop_duplicates(['bird','bird2']).iloc[:2]
print (df)
bird bird2 n range
4 eagle 2 e 3300.0
1 shikra 1 b 1600.0

关于python - 如何在Groupby中保留其他列的行值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56324069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com