Как эффективно объединить несколько столбцов фрейма данных pandas на основе условий? - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь объединить несколько столбцов в Python. Столбцы для объединения различаются в зависимости от значений некоторых других столбцов. Как вы можете сделать это эффективно?

Я уже пытался создать ключ, который группирует поля условий и объединяет его с циклом for, который проверяет каждую строку, находится ли она в определенной группе. Конечно, это займет очень много времени.

Например, учитывая кадр данных (df):

df = pd.DataFrame({'cond_1': ['A', 'B', 'B', 'C', 'D'], 
              'cond_2': ['one', 'two', 'three', 'three', 'four'], 
             'concat_1': ['Mon', 'Tue', 'Fri', 'Wed', 'Thu'],
             'concat_2': ['Sep', 'Oct', 'Oct', 'Nov', 'Dec'],
             'concat_3': ['first', 'second', 'second', 'third', 'fourth']})

У меня есть следующий набор правил:
- если cond_1 = 'A', то concat_1 + concat_2
- если cond_1 = 'B', то если cond_2 = 'two', то concat_1 + concat_3, иначе concat_1 + concat_2
- если cond_1 в ('C', 'D'), то concat_2 + concat_3

, что должно привести к следующему:

cond_1 | cond_2 | concat_1 | concat_2 | concat_3 | result    
---------------------------------------------------------
A      | one    | Mon      | Sep      | first    | MonSep  
B      | two    | Tue      | Oct      | second   | Tuesecond  
B      | three  | Fri      | Oct      | second   | FriOct  
C      | three  | Wed      | Nov      | third    | Novthird  
D      | four   | Thu      | Dec      | fourth   | Decfourth  

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 08 апреля 2019

Вы делаете это с apply, используя функцию для проверки if и concatenation вот так

def concate_it(row):
    if row['cond_1'] == 'A':
        return row['concat_1'] + row['concat_2']
    elif row['cond_1'] == 'B' and row['cond_2'] == 'two':
        return row['concat_1'] + row['concat_3']
    elif row['cond_1'] == 'B' and row['cond_2'] != 'two':
        return row['concat_1'] + row['concat_2']
    elif row['cond_1'] in ['C', 'D']:
        return row['concat_2'] + row['concat_3']

df['result'] = df.apply(lambda row : concate_it(row), axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...