pandas中的groupby元素如何根据连续的行值进行分组

问题描述 投票:0回答:1

我有一个数据框,如下图所示。

   distance_along_path
0       0
1       2.2
2       4.5
3       7.0
4       0
5       3.0
6       5.0
7       0
8       2.0
9       5.0
10      7.0

我希望能够根据distance_along_path的值对这些行进行分组,每当看到一个0的时候,就会创建一个新的组,直到下一个0的时候,所有这些行都在一个组下,如下图所示。

   distance_along_path    group
0       0                  A
1       2.2                A
2       4.5                A    
3       7.0                A
4       0                  B
5       3.0                B
6       5.0                B
7       0                  C
8       2.0                C
9       5.0                C
10      7.0                C

谢谢你了

python pandas pandas-groupby
1个回答
1
投票

你可以试试 eq 其次 cumcun:

df["group"] = df.distance_along_path.eq(0).cumsum()

解释:

  1. 使用 eq 找出等价物 0

  2. 使用 cumcun 累计计算 True 价值观

代码+说明

# Step 1 
print(df.distance_along_path.eq(0))
# 0      True
# 1     False
# 2     False
# 3     False
# 4      True
# 5     False
# 6     False
# 7      True
# 8     False
# 9     False
# 10    False
# Name: distance_along_path, dtype: bool

# Step 2
print(df.assign(group=df.distance_along_path.eq(0).cumsum()))
#     distance_along_path  group
# 0                   0.0      1
# 1                   2.2      1
# 2                   4.5      1
# 3                   7.0      1
# 4                   0.0      2
# 5                   3.0      2
# 6                   5.0      2
# 7                   0.0      3
# 8                   2.0      3
# 9                   5.0      3
# 10                  7.0      3

注意:正如你所看到的,组列是数字而不是字母,但如果它用于 groupby.

© www.soinside.com 2019 - 2024. All rights reserved.