#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]