首页 > 解决方案 > 根据列值将 pandas 数据帧拆分为块

问题描述

我想将数据帧分成从一个 True 值到下一个 True 值的块:

数据 旗帜
MODS 于 2020 年 12 月 12 日开始 真的
一些数据 错误的
一些数据 错误的
MODS 于 2020 年 12 月 30 日开始 真的
一些数据 错误的
一些数据 错误的

数据 旗帜
MODS 于 2020 年 12 月 12 日开始 真的
一些数据 错误的
一些数据 错误的
数据 旗帜
MODS 于 2020 年 12 月 30 日开始 真的
一些数据 错误的
一些数据 错误的

请帮忙

标签: pythonpandasdataframepandas-groupby

解决方案


您可以使用 cumsum 创建组,然后查询每个组的数据名:

df = pd.DataFrame({'data':['MODS start 12/12/202','Some data', 'Some data', 'MODS starts 30/12/2020', 'Some data', 'Some data'],
                  'flag':[True, False, False, True, False, False]})

df['grp'] = df['flag'].cumsum()

print(df)

输出:

                     data   flag  grp
0    MODS start 12/12/202   True    1
1               Some data  False    1
2               Some data  False    1
3  MODS starts 30/12/2020   True    2
4               Some data  False    2
5               Some data  False    2

使用:

df.query('grp == 1')

                   data   flag  grp
0  MODS start 12/12/202   True    1
1             Some data  False    1
2             Some data  False    1

df.query('grp == 2')

                     data   flag  grp
3  MODS starts 30/12/2020   True    2
4               Some data  False    2
5               Some data  False    2

推荐阅读