提问者:小点点

如何将drop_duplicates()与条件一起使用?


我有一个由两列组成的数据帧。A列由字符串组成,B列由数字组成。A列有我要删除的重复项。然而,我只想保留那些在B列中具有最高数字的重复项。这是我的数据帧的示例:

 columnA | columnB
---------------------
 a       | 1
 a       | 2
 b       | 2
 b       | 1

我想要的是:

 columnA | columnB
---------------------
 a       | 2
 b       | 2

使用删除重复项()


共3个答案

匿名用户

您可以根据列B按降序顺序对数据帧进行排序,并在列A上使用drop_duplicates()保持第一次出现:

df.sort_values(by='columnB',ascending=False).drop_duplicates('columnA',keep='first')

   columnA  columnB
13       d      555
27       h        6
16       f        6
6        c        3
1        a        2
2        b        2
15       e        1

示例数据(比您的示例稍微增强):

df.to_dict()

{'columnA': {0: 'a',
  1: 'a',
  2: 'b',
  3: 'b',
  4: 'c',
  5: 'c',
  6: 'c',
  7: 'd',
  8: 'd',
  9: 'd',
  10: 'd',
  11: 'd',
  12: 'd',
  13: 'd',
  14: 'e',
  15: 'e',
  16: 'f',
  17: 'f',
  18: 'f',
  19: 'f',
  20: 'f',
  21: 'f',
  22: 'h',
  23: 'h',
  24: 'h',
  25: 'h',
  26: 'h',
  27: 'h'},
 'columnB': {0: 1,
  1: 2,
  2: 2,
  3: 1,
  4: 1,
  5: 2,
  6: 3,
  7: 33,
  8: 223,
  9: 3,
  10: 2,
  11: 1,
  12: 3,
  13: 555,
  14: 1,
  15: 1,
  16: 6,
  17: 5,
  18: 4,
  19: 3,
  20: 2,
  21: 1,
  22: 1,
  23: 2,
  24: 3,
  25: 4,
  26: 5,
  27: 6}}

匿名用户

将数据帧按a列分组,只取b列的最大值,并用此方法创建新的数据帧也会有所帮助,因为它会保持原始数据帧的原样。df.groupby('列A')['列B']. max()

匿名用户

按“A”分组,取最大值“B”

df.groupby('A').max()