我在 A 列中有一个具有重复值的数据框。我想删除重复项,将具有最高值的行保留在 B 列中。
所以这:
A B
1 10
1 20
2 30
2 40
3 10
应该变成这样:
A B
1 20
2 40
3 10
我猜可能有一种简单的方法可以做到这一点——也许就像在删除重复项之前对 DataFrame 进行排序一样简单——但我不太了解 groupby 的内部逻辑来弄清楚它。有什么建议么?
原文由 Abe 发布,翻译遵循 CC BY-SA 4.0 许可协议
我在 A 列中有一个具有重复值的数据框。我想删除重复项,将具有最高值的行保留在 B 列中。
所以这:
A B
1 10
1 20
2 30
2 40
3 10
应该变成这样:
A B
1 20
2 40
3 10
我猜可能有一种简单的方法可以做到这一点——也许就像在删除重复项之前对 DataFrame 进行排序一样简单——但我不太了解 groupby 的内部逻辑来弄清楚它。有什么建议么?
原文由 Abe 发布,翻译遵循 CC BY-SA 4.0 许可协议
最重要的答案是做太多的工作,并且对于更大的数据集来说看起来非常慢。 apply
速度慢,应尽可能避免。 ix
已弃用,也应避免使用。
df.sort_values('B', ascending=False).drop_duplicates('A').sort_index()
A B
1 1 20
3 2 40
4 3 10
或者简单地按所有其他列分组并取您需要的列的最大值。 df.groupby('A', as_index=False).max()
原文由 Ted Petrou 发布,翻译遵循 CC BY-SA 3.0 许可协议
4 回答4.5k 阅读✓ 已解决
1 回答3.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.9k 阅读✓ 已解决
2 回答431 阅读✓ 已解决
这是最后一个。虽然不是最大值:
您还可以执行以下操作: