我有一個這樣的數據框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']})有沒有一種使用列操作而不是循環遍歷每一行的有效方法?
2 回答

慕哥6287543
TA貢獻1831條經驗 獲得超10個贊
每次值與下一個值不同時,您都需要找到,因此與下一個值進行比較就足夠了:
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

30秒到達戰場
TA貢獻1828條經驗 獲得超6個贊
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
添加回答
舉報
0/150
提交
取消