我像下面一样有一个熊猫df
在df下面,在索引0,1
&
2,3
...... & 500,501,502
中,在X和Y列中找到重复的值,并再次以秒为单位从索引1000, 1001 & 1002,1003 & ....1200,1201....
it goes on
的X和Y列中相同的重复值开始,但权重列中的权重不同。
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) 任何帮助将不胜感激。
答案 0 :(得分:1)
就像评论中提到的@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