熊猫数据框的子集

时间:2018-08-14 23:04:47

标签: python pandas dataframe

我有一个类似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却不成功。

2 个答案:

答案 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