我有这样的df
A B
1 1
1 2
1 3
2 2
2 1
3 2
3 3
3 4
我想提取col B不像升序的行
A B
2 2
2 1
我尝试过
df.groupby("A").filter()...
但是我堆叠起来以提取。
如果您有任何解决方案,请告诉我。
答案 0 :(得分:2)
一种方法是使用pandas.Series.is_monotonic
:
df[df.groupby('A')['B'].transform(lambda x:not x.is_monotonic)]
输出:
A B
3 2 2
4 2 1
答案 1 :(得分:1)
将GroupBy.transform
与Series.diff
一起使用,并与Series.lt
进行比较,并与Series.any
至少比较一个负值,并通过boolean indexing
进行过滤:
df1 = df[df.groupby('A')['B'].transform(lambda x: x.diff().lt(0).any())]
print (df1)
A B
3 2 2
4 2 1