pandas.Series.drop_duplicates用于从列的子部分中选择单个值

时间:2019-06-14 09:03:05

标签: python pandas dataframe

我有一个DataFrame df,其中填充有重复ID的行和列:

Index   A   B   
0   0.00    0.00    
1   0.00    0.00    
29  0.50    105.00  
36  0.80    167.00  
37  0.80    167.00  
42  1.00    209.00  
44  0.50    105.00  
45  0.50    105.00  
46  0.50    105.00  
50  0.00    0.00    
51  0.00    0.00    
52  0.00    0.00    
53  0.00    0.00    

当我使用时:

    df.drop_duplicates(subset=['A'], keep='last')

我得到:

Index   A   B   
37  0.80    167.00  
42  1.00    209.00  
46  0.50    105.00
53  0.00    0.00

这有意义,那就是函数的作用。但是,我实际上想要实现的是这样的:

Index   A   B   
1   0.00    0.00    
29  0.50    105.00  
37  0.80    167.00  
42  1.00    209.00  
46  0.50    105.00  
53  0.00    0.00    

基本上从A列的每个子部分开始(0,0),(0.80、0.80)等。选择最后一个值。

同样重要的是,A列中的值按此顺序保持为0; 0.5; 0.8; 1; 0.5; 0,不会混在一起。

1 个答案:

答案 0 :(得分:0)

Series.neSeries.shift进行比较,并按boolean indexing进行过滤:

df1 = df[df['A'].ne(df['A'].shift(-1))]
print (df1)
         A      B
Index            
1      0.0    0.0
29     0.5  105.0
37     0.8  167.0
42     1.0  209.0
46     0.5  105.0
53     0.0    0.0

详细信息

print (df['A'].ne(df['A'].shift(-1)))
Index
0     False
1      True
29     True
36    False
37     True
42     True
44    False
45    False
46     True
50    False
51    False
52    False
53     True
Name: A, dtype: bool