如何获取熊猫列中最后一次出现条纹的行?

时间:2019-09-27 19:55:18

标签: python pandas

我有一个这样的数据框

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']})

see here

有没有一种使用列操作而不是遍历每一行的有效方法?

2 个答案:

答案 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