Использование shift
и cumsum
с eq
для создания группового ключа, затем использование groupby
sort_values
+ tail
m=(df.C1.shift().ne(df.C1)&df.C1.eq('a')).cumsum()
df.sort_values('C2').groupby(m).tail(1)
Out[62]:
C1 C2
4 b 4
11 a 10
10 b 11
Затем мы объединяем 1-ую группу, все значения C1 являются 'a', используя concat
s1=df.sort_values('C2').groupby(m).tail(1)
s2=df.loc[(df.C1=='a')&(m==1)]
pd.concat([s1,s2]).sort_index()
Out[71]:
C1 C2
0 a 1
1 a 2
2 a 3
4 b 4
10 b 11
11 a 10