我在A列中有一个重复值的数据框 . 我想删除重复项,保持B行中具有最高值的行 .
所以这:
A B
1 10
1 20
2 30
2 40
3 10
应该变成这样:
A B
1 20
2 40
3 10
Wes添加了一些很好的功能来删除重复项:http://wesmckinney.com/blog/?p=340 . 但是AFAICT,它没有提到选择保留哪些行的标准 .
我猜这可能是一种简单的方法 - 可能就像在删除重复项之前对数据帧进行排序一样简单 - 但我不知道groupby的内部逻辑是否足够清楚 . 有什么建议?
8 回答
这需要最后一次 . 虽然不是最大值:
你也可以这样做:
最重要的答案是做了太多的工作,对于大型数据集看起来非常慢 .
apply
很慢,如果可能应该避免 .ix
已弃用,也应予以避免 .或者只是按所有其他列分组并获取所需列的最大值 .
df.groupby('A', as_index=False).max()
试试这个:
你也可以试试这个
我从https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.drop_duplicates.html提到了这个
我认为在你的情况下,你真的不需要一个groupby . 我会按降序排序你的B列,然后在A列删除重复项,如果你愿意,你也可以有一个新的漂亮而干净的索引:
当已经发布帖子回答问题时,我通过添加应用了max()函数的列名进行了一些小改动,以获得更好的代码可读性 .
这也有效:
我不打算给你完整的答案(我还没有找到解析和写入文件部分),但一个关键的提示应该足够了:使用python的
set()
函数,然后sorted()
或.sort()
加上.reverse()
: