Как добавить еще один столбец на основе определенного условия для столбца в пандах данных - PullRequest
1 голос
/ 07 октября 2019

Я попытался это создать еще один столбец уровня, но он не может получить результат

    df['Level'] = np.where((df['DIV0'] != '00') & (df['DIV1'] != '00') & (df['DIV2'] != '00') & (df['DIV3'] != '00'), 'NP', 'Full')
    df['Level'] = np.where((df['DIV0'] != '00') & (df['DIV1'] != '00') & (df['DIV2'] != '00') & (df['DIV3'] == '00'), 'NP', 'Hu')
    df['Level'] = np.where((df['DIV0'] != '00') & (df['DIV1'] != '00') & (df['DIV2'] == '00') & (df['DIV2'] == '00'), 'NP', 'Lim')
    df['Level'] = np.where((df['DIV0'] != '00') & (df['DIV1'] == '00') & (df['DIV2'] == '00') & (df['DIV2'] == '00'), 'NP', 'SEG')

Есть ли какой-либо метод для создания функции python и применения этой функции к кадру данных с помощью apply ()

Ответы [ 2 ]

2 голосов
/ 07 октября 2019

Вы можете сделать это немного по-другому без применения.

dd = {1:'SEG', 2:'Lim', 3:'Hu', 4:'Full'} #Create a dictionary mapping number of Trues to level label.
df['Level'] = (df.iloc[:, 1:] != '00').sum(axis=1).map(dd)

Вывод:

      Final  DIV0  DIV1  DIV2  DIV3 Level
0  78797071    78    79    70    71  Full
1  23000000    23    00    00    00   SEG
2  23450000    23    45    00    00   Lim
3  45678900    45    67    89    00    Hu

Объяснение.

Использование iloc, целочисленное расположение и нарезканотации, мы возвращаем все строки и столбцы в расположении 1 до конца. Затем мы создаем булеву матрицу, чтобы узнать позицию, где значение не равно '00'. Теперь давайте суммируем число истинных значений в каждой строке и используем map, чтобы сопоставить это значение с правильной меткой, используя словарь.

1 голос
/ 07 октября 2019

Это работает для этой конкретной проблемы

def new_column(col0,col1,col3,col4):
    if col2 == 00:
        return 'SEG'
    elif col3 == 00:
        return 'Lim'
    elif col4 == 00:
        return 'Hu'
    else:
        return 'SEG'

df['Level'] = df[['DIV0','DIV1','DIV2','DIV3']].apply(lambda x: new_column(*x),axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...