Добавление столбца, который увеличивается для каждого индекса, который соответствует критериям в другом столбце

#python #pandas

#python #pandas

Вопрос:

Я пытаюсь сгенерировать столбец из фрейма данных, на котором будет основываться моя группировка. Я знаю, что каждый столбец NaN в столбце, отличном от NaN, принадлежит к одной и той же группе. Итак, я написал этот цикл (см. Ниже), но мне было интересно, есть ли более пандовый / питонический способ написать его с помощью apply или списка понимания.

 import pandas

>>> DF = pandas.DataFrame([134, None, None, None, 129374, None, None, 12, None],
                      columns=['Val'])
>>> a = [0]
>>> for i in DF['Val']:
        if i > 1:
            a.append(a[-1]   1)
        else:
            a.append(a[-1])
>>> a.pop(0)  # remove 1st 0 which does not correspond to any rows
>>> DF['Group'] = a
>>> DF
        Val  Group
0     134.0      1
1       NaN      1
2       NaN      1
3       NaN      1
4  129374.0      2
5       NaN      2
6       NaN      2
7      12.0      3
8       NaN      3
  

Ответ №1:

Используется pd.notnull для определения значений, отличных от NaN. Затем используйте cumsum для создания Group столбца:

 import pandas as pd

df = pd.DataFrame([134, None, None, None, 129374, None, None, 12, None],
                  columns=['Val'])
df['Group'] = pd.notnull(df['Val']).cumsum()
print(df)
  

дает

         Val  Group
0     134.0      1
1       NaN      1
2       NaN      1
3       NaN      1
4  129374.0      2
5       NaN      2
6       NaN      2
7      12.0      3
8       NaN      3