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

标签 python pandas-groupby

我的数据框:

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/

相关文章:

python - 返回其类实例的静态方法

python - 遍历列表并加入相同类型的项目

python - Pandas groupby,选择最大值的3个元素,并取每组的均值

python - 从随机坐标列表中查找外边界

python - Google App Engine-如何添加lib文件夹?

python - 按列分组并找到每组的最小值和最大值

python - 如何在 MultiIndex Groupby 中高效执行乘法

python - pandas 组内的动态子分组

python - 将重复的数据帧行与特定列的连接值组合起来

python - 寻找合适的截止值