如何使用 Pandas 在不同列的标志值之间进行分组?

开心发呆

假设我有一个这样的数据框:

日期 is_start is_end
2021-07-16 10:40 错误的 错误的
2021-07-16 10:41 错误的 错误的
2021-07-16 10:42 错误的 错误的
2021-07-16 10:43 真的 错误的
2021-07-16 10:44 错误的 错误的
2021-07-16 10:45 错误的 真的
2021-07-16 10:46 错误的 错误的
2021-07-16 10:47 真的 错误的
2021-07-16 10:48 错误的 错误的
2021-07-16 10:49 错误的 错误的
2021-07-16 10:50 错误的 错误的
2021-07-16 10:51 错误的 真的
2021-07-16 10:52 错误的 错误的
2021-07-16 10:53 错误的 错误的
2021-07-16 10:54 真的 错误的
2021-07-16 10:55 错误的 错误的

我希望能够使用 groupby(或在效率方面类似的东西)在它们各自的 is_start 和 is_end 标志之间(并包括)创建行组。例如:

第一组

日期 is_start is_end
2021-07-16 10:43 真的 错误的
2021-07-16 10:44 错误的 错误的
2021-07-16 10:45 错误的 真的

第 2 组

日期 is_start is_end
2021-07-16 10:47 真的 错误的
2021-07-16 10:48 错误的 错误的
2021-07-16 10:49 错误的 错误的
2021-07-16 10:50 错误的 错误的
2021-07-16 10:51 错误的 真的

我希望有一个解决方案,而不必走与 iterrows 循环的路线,但到目前为止,它让我望而却步。

此外...

(但没那么重要)

有一种方法可以单独识别从 2021-07-16 10:54 开始的未完成组

我想要一片T骨牛排

使用一些cumsum可以解决问题。首先在 is_start 上创建一个组 ID

df['gr'] = df['is_start'].cumsum()
print(df)
                Date  is_start  is_end  gr
0   2021-07-16 10:40     False   False   0
1   2021-07-16 10:41     False   False   0
2   2021-07-16 10:42     False   False   0
3   2021-07-16 10:43      True   False   1
4   2021-07-16 10:44     False   False   1
5   2021-07-16 10:45     False    True   1
6   2021-07-16 10:46     False   False   1
7   2021-07-16 10:47      True   False   2
8   2021-07-16 10:48     False   False   2
9   2021-07-16 10:49     False   False   2
10  2021-07-16 10:50     False   False   2
11  2021-07-16 10:51     False    True   2
12  2021-07-16 10:52     False   False   2
13  2021-07-16 10:53     False   False   2
14  2021-07-16 10:54      True   False   3
15  2021-07-16 10:55     False   False   3

然后cumsum在 is_end 上再次使用shift它包含结束行。将其减去之前创建的列 gr 以删除末尾之后的行。自身相乘。

df['gr'] = (df['gr'] - df['is_end'].cumsum().shift(fill_value=0))*df['gr']
print(df)
                Date  is_start  is_end  gr
0   2021-07-16 10:40     False   False   0
1   2021-07-16 10:41     False   False   0
2   2021-07-16 10:42     False   False   0
3   2021-07-16 10:43      True   False   1
4   2021-07-16 10:44     False   False   1
5   2021-07-16 10:45     False    True   1
6   2021-07-16 10:46     False   False   0
7   2021-07-16 10:47      True   False   2
8   2021-07-16 10:48     False   False   2
9   2021-07-16 10:49     False   False   2
10  2021-07-16 10:50     False   False   2
11  2021-07-16 10:51     False    True   2
12  2021-07-16 10:52     False   False   0
13  2021-07-16 10:53     False   False   0
14  2021-07-16 10:54      True   False   3
15  2021-07-16 10:55     False   False   3

现在要获取组并停止未完成的组,您可以执行以下操作:

for gr, dfg in df.loc[df['gr']>0].groupby('gr'):
    if not dfg['is_end'].any(): print(f'unfinished groupe{gr}', dfg)
    print(f'groupe{gr}', dfg)

注意:这仅在 is_start 之前 is_end 中没有 True 时才有效

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 Pandas 中的不同列进行聚合分组

Pandas 如何按列的值对列进行分组

使用列值列表对 Pandas 中的各个列进行分组

使用pd.cut对列值进行分组-Pandas

如何使用Pandas对两列进行分组并计算行的总和?

如何使用 MultiIndex 列对 Pandas DataFrame 进行分组?

如何使用python和pandas对多列进行分组

如何在按不同列分组的Pandas DataFrame列中绘制值的图形

如何根据pandas中的不同条件和列对2个数据框进行分组

如何使用 pandas 选择指定值的特定列并与不需要特定值的不同列进行比较?

Pandas:如何按连续列值分组

对重复的列进行分组,并使用pandas对相应的列值求和

使用Pandas通过多列值将不同行的列表分组

如何在Python Pandas中对具有计数唯一值的多列进行分组

Pandas:如何按不同条件对多行进行分组

如何根据加速值对一列进行分组并进一步对另一列进行分组并对其进行计数(Pandas Python)

如何在保持列结构的同时使用 Pandas 对多索引列进行分组?

Python / Pandas-如何按两列分组并用第二列中第三列的值对行进行计数

Pandas Groupby:如何获取不同的列值

如何在pandas DataFrame中对连续值进行分组

如何按局部最小值对 Pandas DataFrame 进行分组?

使用 Pandas 进行复杂分组

使用 Pandas 进行分组优化

如何通过不同的值对一个Pandas数据框列的元素进行切片?

如何使用 Pandas 过滤值?

如何使用正则表达式匹配按列对Pandas数据进行分组

如何按 Pandas 中的列数对数据进行分组?

Pandas - 如何对数据框的子列进行分组?

Python Pandas:以最少的步骤和非常快速的方式对不同列的值进行分组和计数