Создание нового столбца при условии двух других столбцов pandas

#python #pandas

#python #pandas

Вопрос:

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

         column_a        column_b             column_c

   0  'dog is fast'   'dog is faster'      'dog is faster' (desired output)
  

Я попробовал этот код, но получил сообщение об ошибке, в котором говорится, что int не является итеративным, я думал о слиянии серии after с df. Я не был уверен, как сразу реализовать это в столбце df.

 column_c = pd.Series()

 for i in len(df.column_a):
  if len(df.column_a.iloc[i]) >= len(df.column_b.iloc[0]):
    column_c.append(df.column_a.iloc[i])
  else:
    column_c.append(df.column_b.iloc[i])
  

любая помощь приветствуется.

Ответ №1:

Используйте pandas.DataFrame.apply :

Дан образец данных

 import pandas as pd

df = pd.DataFrame([['fast', 'faster'], ['slower', 'slow']])
        0       1
0    fast  faster
1  slower    slow

df['column_c'] = df.apply(lambda x:max(x, key=len), 1)
  

Вывод:

         0       1 column_c
0    fast  faster   faster
1  slower    slow   slower
  

Ответ №2:

Использование np.where с str.len

 df['column_c']=np.where(df.column_a.str.len()>df.column_b.str.len(),df.column_a,df.column_b)
df
Out[301]: 
        column_a         column_b         column_c
0  'dog is fast'  'dog is faster'  'dog is faster'
  

Ответ №3:

Можно использовать df.apply()

 df['column_c'] = df.apply(lambda x: x[0] if len(x[0]) > len(x[1]) else x[1], axis=1)
  

Ответ №4:

Вы можете использовать DataFrame.apply . Вам нужно применить к определенным столбцам, если у вас более двух столбцов в вашем фрейме данных

 df['column_c'] = df.apply(lambda x: x[0] if len(x[0]) > len(x[1]) else x[1], axis = 1)

     column_a        column_b        column_c
0   'dog is fast'   'dog is faster' 'dog is faster'
  

Комментарии:

1. о, это здорово, я прочитал документ apply и не упомянул, что вы можете создавать несколько столбцов. Спасибо.

2. На оси 1 функция будет применена ко всем столбцам. В этом случае есть два столбца, поэтому доступ затем осуществляется с помощью x [0] и x[1]