gpt4 book ai didi

python - 选择每组的最大值

转载 作者:行者123 更新时间:2023-12-01 01:33:14 25 4
gpt4 key购买 nike

所以我有一个包含多个列和一个 id 列的 pandas 数据框。

df = pd.DataFrame(np.random.randn(6,4), columns=list('ABCD'))
df['id'] = ['CA', 'CA', 'CA', 'FL', 'FL', 'FL']
df['technique'] = ['one', 'two', 'three', 'one', 'two', 'three']
df

我想按 id 列进行分组并选择概率最高的行。所以它可能看起来像这样。

id   highest_prob   technique
CA B three
FL C one

我尝试过类似的事情,但这只能让我成功一半。

df.groupby('id', as_index=False)[['A','B','C','D']].max() 

任何人都可以建议我如何获得所需的结果

最佳答案

设置

np.random.seed(0)  # Add seed to reproduce results. 
df = pd.DataFrame(np.random.randn(6,4), columns=list('ABCD'))
df['id'] = ['CA', 'CA', 'CA', 'FL', 'FL', 'FL']
df['technique'] = ['one', 'two', 'three', 'one', 'two', 'three']

您可以melt,使用sort_values排序,并使用drop_duplicates删除重复项:

(df.melt(['id', 'technique'])
.sort_values(['id', 'value'], ascending=[True, False])
.drop_duplicates('id')
.drop('value', 1)
.reset_index(drop=True)
.rename({'variable': 'highest_prob'}, axis=1))

id technique highest_prob
0 CA one D
1 FL two A
<小时/>

另一种解决方案是使用meltgroupby:

v = df.melt(['id', 'technique'])
(v.iloc[v.groupby('id').value.idxmax()]
.drop('value', 1)
.reset_index(drop=True)
.rename({'variable': 'highest_prob'}, axis=1))

id technique highest_prob
0 CA one D
1 FL two A

关于python - 选择每组的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52619565/

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