我有一个数据框,我想对其进行分组(或切片)。数据框的形式为
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/