将重复项放在DF中以获取特定值

时间:2019-06-26 16:02:10

标签: python pandas

在数据帧中,尝试在排序后删除重复项,尽管仅针对特定值。 DF看起来像

Fruit   value
apple   1
orange  2
pear    1
pear    2
pear    3

仅当值是pear时,我才想删除重复项,并保留梨的最高值。

我已将当前的DF分为2个: 1.苹果和橙子-DF1 2.配梨-DF2 3.降序排列 4.删除梨2和梨1 5.串联的DF1和DF2

这看起来很麻烦,所以想知道是否有更简单的方法来实现这一目标。

Fruit   value
apple   1
orange  2
pear    3

3 个答案:

答案 0 :(得分:2)

在您的情况下,将它们拆分,然后drop_duplicates,然后concat再拆分

df1=df.loc[df.Fruit.eq('pear')]
pd.concat([df.drop(df1.index),df1.sort_values('value').drop_duplicates('Fruit',keep='last')]).sort_index()
Out[111]: 
    Fruit  value
0   apple      1
1  orange      2
4    pear      3

答案 1 :(得分:2)

您将需要两个条件。一个用于重复检查(保留最大值),另一个用于水果:

m1 = df.sort_values('value', ascending=False).duplicated('Fruit')
m2 = df['Fruit'].eq('pear')

df[~(m1 & m2)]

    Fruit  value
0   apple      1
1  orange      2
4    pear      3

答案 2 :(得分:0)

排序后尝试

  1. 以降序排列以使最高价值位于顶部
  2. 因为您只需要在水果=='梨'
  3. 时删除
df.sort_values(by='value',ascending=[False],inplace=True)
df = df[~((df['fruit'].duplicated()) &(df['fruit']=='pear'))]
df.sort_values(by='value',ascending=[True],inplace=True)