Как создать последовательность чисел при обнаружении значения в python pandas dataframe - PullRequest
1 голос
/ 24 марта 2020

выборка и ожидаемые данные

Первый блок - это текущие данные, а блок 2 - ожидаемые данные, то есть, когда я сталкиваюсь с 1, мне нужно увеличить следующую строку на единицу и для следующей страны b то же самое должно произойти

1 Ответ

0 голосов
/ 24 марта 2020

Сначала замените все другие значения после первых 1 на 1, поэтому возможно использование GroupBy.cumsum:

df = pd.DataFrame({'c':['a']*3 + ['b']*3+ ['c']*3, 'v':[1,0,0,0,1,0,0,0,1]})

s = df.groupby('c')['v'].cumsum()
df['new'] = s.where(s.eq(0), 1).groupby(df['c']).cumsum()
print (df)
   c  v  new
0  a  1    1
1  a  0    2
2  a  0    3
3  b  0    0
4  b  1    1
5  b  0    2
6  c  0    0
7  c  0    0
8  c  1    1

Другое решение - заменить все, а не 1 значения к пропущенным значениям и прямое заполнение 1 для групп, затем сначала пропущенные значения заменяются на 0, поэтому кумулятивная сумма также отлично работает:

s = df['v'].where(df['v'].eq(1)).groupby(df['c']).ffill().fillna(0).astype(int)
df['new'] = s.groupby(df['c']).cumsum()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...