微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果没有最大值,则删除重复项但保留最大值并保留最大值为 0 的第一行

如何解决如果没有最大值,则删除重复项但保留最大值并保留最大值为 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?