【问题标题】:Drop duplicates keeping the row with the highest value in another column删除重复项,将具有最高值的行保留在另一列中
【发布时间】:2018-12-29 18:37:08
【问题描述】:
a = [['John', 'Mary', 'John'], [10,22,50]])
df1 = pd.DataFrame(a, columns=['Name', 'Count'])

给定这样的数据框,我想将“Name”的所有相似字符串值与“Count”值进行比较以确定最高值。我不确定如何在 Python 的数据框中执行此操作。

例如:在上述情况下,答案是:

  • 姓名计数
  • 3 月 22 日
  • 约翰 50

较低的值 John 10 已被删除(我只想根据“Name”的相同值查看“Count”的最大值)。

在 SQL 中,它类似于 Select Case 查询(其中我选择 Case where Name == Name & Count > 递归地计数以确定最大数字。或者每个名称的 For 循环,但据我了解循环由于对象的性质,DataFrames 不是一个好主意。

有没有办法在 Python 中使用 DF 来做到这一点?我可以为每个变量创建一个新的数据框(一个只有 John 的数据框,然后获得最高值(df.value()[:1] 或类似的)。但由于我有数百个独特的条目,这似乎是一个糟糕的解决方案。 :D

【问题讨论】:

  • 你应该修复你的样本输入,但我猜你想要df.groupby('Name').Count.max()
  • 让我尝试修复它,Count.max 在这里帮不了我。我会再试一次。

标签: python pandas


【解决方案1】:

sort_valuesdrop_duplicates

df1.sort_values('Count').drop_duplicates('Name', keep='last')

   Name  Count
1  Mary     22
2  John     50

或者,就像 miradulo 所说,groupbymax

df1.groupby('Name')['Count'].max().reset_index()

   Name  Count
0  John     50
1  Mary     22

【讨论】:

  • 完美,我在更大的数据集上对此进行了测试,看起来 #1 有效。
  • @Kafka 只是好奇,为什么你认为 groupby 和 Count.max 没有帮助?
  • 我提供的样品可能是我的错。在我的数据集中,我有 7 列,但大部分值与这项工作无关,因此我专注于需要查看的数据类型。当我运行 Count.max 时,我收到关于列计数的 AssertionError。尽管我在列值中犯了一个愚蠢的错误,但在查看了自己的代码之后。清洁后 Count.max 工作正常。
猜你喜欢
  • 2016-07-26
  • 2017-06-09
  • 2012-09-11
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 2014-03-29
  • 1970-01-01
  • 2021-07-13
相关资源
最近更新 更多