#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