如果满足条件,则为Groupby列

时间:2017-12-18 13:29:38

标签: python pandas

我在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

我该怎么做? 谢谢!

1 个答案:

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