python - 在给定行上遇到特定值时的数据框分组

标签 python pandas dataframe group-by

我有一个数据框,我想对其进行分组(或切片)。数据框的形式为

A  B  C
a  b  1
a  b  0
a  b  1
a  b  2
a  b  0
a  e  3
a  e  3
f  g  6
f  g  7
f  g  0

我想首先将数据框在 A 列和 B 列上分组。然后,每个组进一步按特定值拆分为具有连续行的较小组。例如,在按 A 列和 B 列对数据帧进行分组后,每当我在 C 列中遇到 0 时,我都想在第三层优化分组。所以分组数据框就像

A  B  C
a  b  1
a  b  0

a  b  1
a  b  2
a  b  0

a  e  3
a  e  3

f  g  6
f  g  7
f  g  0

在示例中按列值(如 A 列和 B 列)对数据帧进行分组很简单,但我不知道如何在级别 3 上进一步分组为具有特定切点的连续行。如果您能提供帮助,请提前致谢。

最佳答案

要做到这一点,方法总是相同的:创建一个额外的列(有时或多个列)来表示您的特定分组逻辑,然后根据它进行分组:

df.groupby(['A', 'B', 'cut_point']).groups
Out[139]: 
{('a', 'b', 0.0): Int64Index([0, 1], dtype='int64'),
 ('a', 'b', 1.0): Int64Index([2, 3, 4], dtype='int64'),
 ('a', 'e', 2.0): Int64Index([5, 6], dtype='int64'),
 ('f', 'g', 2.0): Int64Index([7, 8, 9], dtype='int64')}

df['cut_point'] = (df.C==0).cumsum().shift().fillna(0)

df.groupby(['A', 'B', 'cut_point']).groups
Out[141]: 
{('a', 'b', 0.0): Int64Index([0, 1], dtype='int64'),
 ('a', 'b', 1.0): Int64Index([2, 3, 4], dtype='int64'),
 ('a', 'e', 2.0): Int64Index([5, 6], dtype='int64'),
 ('f', 'g', 2.0): Int64Index([7, 8, 9], dtype='int64')}

关于python - 在给定行上遇到特定值时的数据框分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42029044/

相关文章:

Python CExtension 给出 ModuleNotFoundError

用列表中的值替换模板文件中的文本的 Python 脚本

python - 如何使用 Pandas 中每天变化的固定引用进行计算?

python - 如何在 INI 文件中写入时删除空格 - Python

python - 堆栈跟踪中 Python 函数的名称

python - 如果两个单独的列匹配,Pandas 在当前索引中返回单独的列值

python - 从多列制作 Pandas 数据框行值列表

python - 每次pandas数据框中出现NaN时如何重置累积和?

python - 如何使数据框中的每个组具有相同的大小?

python - pandas DataFrame 中的操作