我有一个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,不会混在一起。
答案 0 :(得分:0)
将Series.ne
与Series.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