我正在尝试查找序列数的最大值,每个序列均按提取其的列的名称分组。
我有一个这样的数据框:
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]
但是在输入之后,我无法理解我正在处理什么类型的数据。以及如何对这些值进行排序。
答案 0 :(得分:1)
IIUC,一个选项是sort_values
和GroupBy.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
另一个正在使用set_index
和GroupBy.nlargest
且n = 2:
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
答案 1 :(得分:0)
您可以结合使用sort和groupby:
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)}