使用pandas返回每组前N个最大值

2024-06-28 19:46:00 发布

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

我试图找到最大值,在数量的系列,每个分组的名称列它是从中提取。你知道吗

我有这样一个数据帧:

MASTER      SLAVE       Value

Master_1    Slave_1     657879
Master_1    Slave_2     34343
Master_1    Slave_3     453313

Master_2    Slave_1     56667
Master_2    Slave_2     6879
Master_2    Slave_3     12333
Master_2    Slave_4     789
Master_2    Slave_5     22235

Master_3    Slave_1     65765
Master_3    Slave_2     23431
Master_3    Slave_3     445
Master_3    Slave_4     567

我需要找到每个主的前两个奴隶的最大值。你知道吗

到目前为止,我已经知道了:

df.groupby('MASTER')['SLAVE'].unique()

它为每个“主”输出系列“从”值:

Master_1    [657879, 34343, 453313]
Master_2    [56667, 6879, 12333, 789, 22235]
Master_3    [65765, 23431, 445, 789, 567]

但我无法理解在输入之后我处理的是什么类型的数据。以及如何对这些值进行排序。你知道吗


Tags: 数据master名称类型df数量排序value
2条回答

IIUC,一个选项是sort_valuesGroupBy.head,其中n=2:

df.sort_values('Value', ascending=False).groupby('MASTER', sort=False).head(2)

     MASTER    SLAVE   Value
0  Master_1  Slave_1  657879
2  Master_1  Slave_3  453313
8  Master_3  Slave_1   65765
3  Master_2  Slave_1   56667
9  Master_3  Slave_2   23431
7  Master_2  Slave_5   22235

另一种是使用n=2的set_indexGroupBy.nlargest

df.set_index('SLAVE').groupby('MASTER')['Value'].nlargest(2).reset_index()

     MASTER    SLAVE   Value
0  Master_1  Slave_1  657879
1  Master_1  Slave_3  453313
2  Master_2  Slave_1   56667
3  Master_2  Slave_5   22235
4  Master_3  Slave_1   65765
5  Master_3  Slave_2   23431

您可以使用排序和分组方式的组合:

df.sort_values(['MASTER', 'Value'], ascending=[True, False], inplace=True)
grp = df.groupby('MASTER')['SLAVE'].indices
slaves = {k: df.loc[k][:2]['SLAVE'].values  for k in grp.keys()}

将输出:

{'Master_1': array(['Slave_1', 'Slave_3'], dtype=object),
 'Master_2': array(['Slave_1', 'Slave_5'], dtype=object),
 'Master_3': array(['Slave_1', 'Slave_2'], dtype=object)}

相关问题 更多 >