我在pandas中有以下数据框:
a b
0 0 0
1 1 1
2 2 0
3 3 0
4 4 1
我想按列b进行分组(如在groupby(' b')中),但仅当同时a列的值是连续的(单调增加)时才是如此。例如。输出应该是:
Group 1: Row 0
Group 2: Row 1
Group 3: Row 2, 3
Group 4: Row 4
我该怎么做? 谢谢!
答案 0 :(得分:2)
IIUC,根据您的条件构建临时系列 -
i = df.a.eq(df.a.shift() + 1) # monotonically increasing values in a
j = df.b.ne(df.b.shift()).cumsum() # equal consecutive values in b
现在,请致电groupby
-
for _, g in df.groupby([i, j]):
print(g, '\n')
a b
0 0 0
a b
1 1 1
a b
2 2 0
3 3 0
a b
4 4 1
<强>详情
i
是一系列bool,它表示一个值是否相对于上面的元素单调递增。
i
0 False
1 True
2 True
3 True
4 True
Name: a, dtype: bool
j
是一个系列,用于为df.b
中的连续值指定组。
j
0 1
1 2
2 3
3 3
4 4
Name: b, dtype: int64