python - 根据 Pandas df 另一列中的最大值删除重复行
问题描述
我有一个如下所示的熊猫 df
在下面的 df 中,在索引中0,1
&
2,3
......& 500,501,502
在 X 和 Y 列中找到的重复值,第二轮再次以索引中 X 和 Y 列中的相同重复值开始,1000, 1001 & 1002,1003 & ....1200,1201....
it goes on
但在权重列中具有不同的权重。
index x y weight
0 59.644 10.72 0.69
1 59.644 10.72 0.82
2 57.822 10.13 0.75
3 57.822 10.13 0.68
4 57.822 10.13 0.20
.
.
500 53.252 10.85 0.15
501 53.252 10.85 0.95
502 53.252 10.85 0.69
.
.
1000 59.644 10.72 0.85
1001 59.644 10.72 0.73
1002 57.822 10.13 0.92
1003 57.822 10.13 0.15
.
.
.
1200 53.252 10.85 0.78
1201 53.252 10.85 1.098
我的要求
我想要我的 df
1) 避免在 X 和 Y 中重复/重复的行值,其权重值小于 0.602)但仍然在 X 和 Y 列重复中重复,所以现在我想比较重复行之间的权重值并删除权重较小的行。
3)如果我使用下面的代码,它会删除 x & y 之间的所有重复项
df_2.groupby(['X', 'Y'], as_index=False,sort=False)['weight'].max()
但是我想比较第一个出现的重复项并删除它们,然后是第二个,然后是第三个,依此类推..以便在某些行之后重复值的连续性占优势。为了更好地理解,请参考以下所需的df
df 应该是什么样子:
index x y weight
1 59.644 10.72 0.82
2 57.822 10.13 0.75
.
.
501 53.252 10.85 0.95
.
.
1000 59.644 10.72 0.85
.
1002 57.822 10.13 0.92
.
.
1201 53.252 10.85 1.098
.
.
我曾尝试使用 if 语句,但代码行增加了。我相信应该有一种替代的pythonic方式让它更容易。(内置函数或使用 numpy)任何帮助将不胜感激。
解决方案
就像评论中提到的@Erfan 一样,这里有必要按助手分组Series
以区分连续的组:
x1 = df['x'].ne(df['x'].shift()).cumsum()
y1 = df['y'].ne(df['y'].shift()).cumsum()
df = df[df.groupby([x1, y1])['weight'].transform('max') == df['weight']]
print (df)
index x y weight
1 1 59.644 10.72 0.820
2 2 57.822 10.13 0.750
6 501 53.252 10.85 0.950
8 1000 59.644 10.72 0.850
10 1002 57.822 10.13 0.920
13 1201 53.252 10.85 1.098
推荐阅读
- excel - 跨不同工作表的 Hlookup 返回错误
- ios - 隐藏 iPhoneX 导航控制器中嵌入的 VC 的状态栏
- javascript - 如何从/通过类名获取所有css样式属性?如何在样式表中找到一个类?
- java - 调试 Java / Tomcat 应用程序创建内部连接
- android - 在 Application onCreate 期间 React Native Android Module 调用库
- python - 如何同时使用 Spyder 和 PyCharm /Git
- c++ - CMake:未定义对 img_LOAD 的引用,同时找到库
- c++ - 如何在 GTK C++ 中使子小部件可滚动?
- javascript - 格式化日期不从字符串分配新数据
- html - 屏幕阅读器在阅读下一个元素标签后阅读错误消息