如何解决如果没有最大值,则删除重复项但保留最大值并保留最大值为 0 的第一行
df = pd.DataFrame({'Index': ['0','0','1','2','2'],'Title': ["CEO","VP","CEO","Exec Director","Director","Manager"],'Compensation': ['125000','100000','0'] })
我的目标是根据索引删除重复值,并保持最大值为该索引号的补偿。但是,有些指标的薪酬值为 0。在这些情况下,我只想保留第一个列出的人,因为它通常是 CEO。
我尝试了以下解决方案:
df2 = df.groupby('Index',as_index=False).max('Compensation')
这对我不起作用,因为对于补偿为 0 的索引分组,它似乎选择最后一个而不是第一个
我也试过:
df2 = df.sort_values('Compensation',ascending=False).drop_duplicates('Index',keep='first').sort_index()
这对我不起作用,因为它并不总是采用索引中第一个列出的人,整个组报告的薪酬为 0。有时会,有时不会。我找不到这种情况的模式或原因。我意识到问题似乎没有在我的示例数据框中复制
解决方案中的一个潜在限制是我的 DF 大约有 2000 万行,结果 DF2 应该是大约 160 万行。上面的代码成功地实现了这么多,但同样,问题是如何拉动 0 补偿索引组。
我了解文档指出应该采用第一个遇到的情况,但鉴于我在使用上述代码之前和之后检查了数据,情况并非如此。
关于如何进行的任何想法?
解决方法
那么让我们试试idxmax
#df.Compensation=df.Compensation.astype(int)
out = df.loc[df.groupby('Index')['Compensation'].idxmax()]
Out[321]:
Index Title Compensation
0 0 CEO 125000
2 1 CEO 0
更新这里的原因是sort_values
默认是quicksort
,我们应该改为mergesort
df2 = df.sort_values('Compensation',ascending=False).drop_duplicates('Index',keep='first',kind = 'mergesort').sort_index()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。