我有一个这样的数据框
df1 = pd.DataFrame({'x':[0,1,2,3,4,5,6,7,8,9],'y':['a','a','b','c','b','b','a','b','c','c']})
我们如何返回如下数据框
df2 = pd.DataFrame({'x':[1,2,3,5,6,7,9],'y':['a','b','c','b','a','b','c']})
有没有一种使用列操作而不是遍历每一行的有效方法?
答案 0 :(得分:3)
每次都需要查找与下一个不同的值,因此与下一个进行比较就足够了:
mask = df1['y'].ne(df1['y'].shift(-1))
df2 = df1[mask].reset_index(drop=True)
print(df2)
输出
x y
0 1 a
1 2 b
2 3 c
3 5 b
4 6 a
5 7 b
6 9 c
答案 1 :(得分:2)
cumsum
的经典应用程序来查找连续的块:
df1.groupby(df1['y'].ne(df1['y'].shift()).cumsum(), as_index=False).last()
输出:
x y
0 1 a
1 2 b
2 3 c
3 5 b
4 6 a
5 7 b
6 9 c