Как элементы groupby в pandas на основе значений последовательных строк - PullRequest
1 голос
/ 09 мая 2020

У меня есть фрейм данных, как показано ниже:

   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

Спасибо

1 Ответ

1 голос
/ 09 мая 2020

Вы можете попробовать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...