我有一个类似df的数据框
Sample Percentage Attribute1 Attribute2
1_A 12.3 xxxx yyyy
1_A 5.0 aaaa bbbb
2_B 10 ccccc ddddd
对于每个样本,我想选择百分比中具有最大值的行,并制作一个数据框df1。如果一个样本存在多个百分比(例如1_A),我想制作一个数据框df2,其中所有行均不是为df1选择的。在上面的示例中:df1将具有示例1_A和2_B的行,而df2将具有来自示例2B的行。我尝试了groupby('Percentage')
,然后尝试了apply(list)
,但对于df1却不成功。
答案 0 :(得分:2)
IIUC drop_duplicates
df.sort_values('Percentage').drop_duplicates('Sample',keep='last')
Out[1046]:
Sample Percentage Attribute1 Attribute2
2 2_B 10.0 ccccc ddddd
0 1_A 12.3 xxxx yyyy
答案 1 :(得分:0)
我将首先通过按Percentage
对数据帧进行排序,因此较高的百分比在底部。然后,groupby
Sample
列,并使用tail(1)
获取最后一行以创建df1
。然后,要创建df2
,只需找到索引不在df
中的df1
行:
df1 = df.sort_values('Percentage').groupby('Sample').tail(1)
df2 = df[~df.index.isin(df1.index)]
>>> df1
Sample Percentage Attribute1 Attribute2
2 2_B 10.0 ccccc ddddd
0 1_A 12.3 xxxx yyyy
>>> df2
Sample Percentage Attribute1 Attribute2
1 1_A 5.0 aaaa bbbb