根据Pandas df中另一列的最大值删除重复的行

时间:2019-05-23 15:01:16

标签: python python-3.x pandas python-2.7 numpy

我像下面一样有一个熊猫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.60

     

2)但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) 任何帮助将不胜感激。

1 个答案:

答案 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
相关问题