#python #python_3x #pandas #dataframe
Есть DataFrame, в котором записаны нули и единицы, df = pd.DataFrame({'A': [0,0,1,1,1,0,1]}) A 0 0 1 0 2 1 3 1 4 1 5 0 6 1 Необходимо пронумеровать только 1, а 0 оставить без изменения, т.е. должны получить: A 0 0 1 0 2 1 3 2 4 3 5 0 6 1
Ответы
Ответ 1
In [186]: df.groupby(df['A'].diff().ne(0).cumsum()).cumsum() Out[186]: A 0 0 1 0 2 1 3 2 4 3 5 0 6 1 Пошагово: разница между текущей и предыдущей строкой: In [2]: df['A'].diff() Out[2]: 0 NaN 1 0.0 2 1.0 3 0.0 4 0.0 5 -1.0 6 1.0 Name: A, dtype: float64 сравниваем значения из шага [2] с 0: In [3]: df['A'].diff().ne(0) Out[3]: 0 True 1 False 2 True 3 False 4 False 5 True 6 True Name: A, dtype: bool кумулятивно суммируем то что получилось на предыдущем шаге [3] (в Python - False == 0, True == 1): In [4]: df['A'].diff().ne(0).cumsum() Out[4]: 0 1 1 1 2 2 3 2 4 2 5 3 6 4 Name: A, dtype: int32 дальше группируем по значениям из шага [4] и считаем кумулятивную сумму: In [8]: df.groupby(df['A'].diff().ne(0).cumsum()).cumsum() Out[8]: A 0 0 1 0 2 1 3 2 4 3 5 0 6 1
Комментариев нет:
Отправить комментарий