gpt4 book ai didi

python - 分组并查找属于 n 个唯一最大值的所有值

转载 作者:行者123 更新时间:2023-12-04 15:17:01 24 4
gpt4 key购买 nike

我的数据框:

data = {'Input':[133217,133217,133217,133217,133217,133217,132426,132426,132426,132426,132426,132426,132426,132426],
'Font':[30,25,25,21,20,19,50,50,50,38,38,30,30,29]}

Input Font
0 133217 30
1 133217 25
2 133217 25
3 133217 21
4 133217 20
5 133217 19
6 132426 50
7 132426 50
8 132426 50
9 132426 38
10 132426 38
11 132426 30
12 132426 30
13 132426 29

我想创建一个仅包含 中的值的新数据框字体 属于 3 个唯一的最大值。例如,输入 133217 的 3 个最大字体值为 30、25、21。

预期输出:
op_data = {'Input':[133217,133217,133217,133217,132426,132426,132426,132426,132426,132426,132426],
'Font':[30,25,25,21,50,50,50,38,38,30,30]}

Input Font
0 133217 30
1 133217 25
2 133217 25
3 133217 21
4 132426 50
5 132426 50
6 132426 50
7 132426 38
8 132426 38
9 132426 30
10 132426 30

我已经用来自 Pandas 的 groupby 尝试过这个:
df = pd.DataFrame(data)
df['order'] = df.groupby('Input').cumcount()+1

然后我考虑了 df['order'] 中的 1,2,3 个值,这没有按计划进行。有什么替代方法吗?

最佳答案

您可以找到每个组的唯一值,获取具有三个最大值的列表并选择此列表中的行:

df.groupby('Input')['Font'].\
apply(lambda x: x[x.isin(np.sort(x.unique())[-3:])]).\
reset_index(level=0)

输出:
     Input  Font
6 132426 50
7 132426 50
8 132426 50
9 132426 38
10 132426 38
11 132426 30
12 132426 30
0 133217 30
1 133217 25
2 133217 25
3 133217 21

关于python - 分组并查找属于 n 个唯一最大值的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59171745/

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