我有以下Pandas 数据框:

df = pd.DataFrame({
   'A': [1,1,1,1,2,2,2,1,1,3,3,3],
   'B': [0,0,1,1,0,0,0,1,1,0,0,0],
});
df.index.names = ['Index']
df
        A   B
Index       
0       1   0
1       1   0
2       1   1
3       1   1
4       2   0
5       2   0
6       2   0
7       1   1
8       1   1
9       3   0
10      3   0
11      3   0

我可以将此数据帧分组为常量‘A’块,如下所示:

df = df.groupby(df['A'].diff().ne(0).cumsum()).apply(lambda x: x)
df.index.names = ['Block', 'Index']
df
                A   B
Block   Index       
1       0       1   0
        1       1   0
        2       1   1
        3       1   1
2       4       2   0
        5       2   0
        6       2   0
3       7       1   1
        8       1   1
4       9       3   0
        10      3   0
        11      3   0

我如何将该数据帧分组为常量‘A’AND常量‘B’的块?我想要的结果是:

                A   B
Block   Index       
1       0       1   0
        1       1   0
2       2       1   1
        3       1   1
3       4       2   0
        5       2   0
        6       2   0
4       7       1   1
        8       1   1
5       9       3   0
        10      3   0
        11      3   0

推荐答案

使用与Grouper相同的逻辑any(df.diff().ne(0).any(axis=1).cumsum()):

out = df.groupby(df.diff().ne(0).any(axis=1).cumsum(), group_keys=True).apply(lambda x: x)
out.index.names = ['Block', 'Index']

或者:

out = (df.assign(Block=df.diff().ne(0).any(axis=1).cumsum())
         .groupby('Block', group_keys=True)
         .apply(lambda x: x)
       )

输出:

             A  B
Block Index      
1     0      1  0
      1      1  0
2     2      1  1
      3      1  1
3     4      2  0
      5      2  0
      6      2  0
4     7      1  1
      8      1  1
5     9      3  0
      10     3  0
      11     3  0

Python相关问答推荐

使用子字符串动态更新Python DataFrame中的列

在for循环中保存和删除收件箱

如何从不同长度的HTML表格中抓取准确的字段?

只需使用Python在图像中保留 colored颜色 范围区域

如何判断LazyFrame是否为空?

删除pandas rame时间序列列中未更改的值

在for循环中仅执行一次此操作

多处理代码在while循环中不工作

在函数内部使用eval(),将函数的输入作为字符串的一部分

Class_weight参数不影响RandomForestClassifier不平衡数据集中的结果

DataFrame groupby函数从列返回数组而不是值

时间序列分解

如何记录脚本输出

' osmnx.shortest_track '返回有效源 node 和目标 node 的'无'

如何在Python中并行化以下搜索?

numpy卷积与有效

使用密钥字典重新配置嵌套字典密钥名

连接一个rabrame和另一个1d rabrame不是问题,但当使用[...]'运算符会产生不同的结果

寻找Regex模式返回与我当前函数类似的结果

Python—压缩叶 map html作为邮箱附件并通过sendgrid发送