我有一个包含两列的数据框。我想创建一个新列并输入具有最长字符串的列。所以
column_a column_b column_c
0 'dog is fast' 'dog is faster' 'dog is faster' (desired output)
我尝试了这段代码,但收到一个错误消息,说int不可迭代,我在考虑将序列合并到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])
很感谢任何帮助。
答案 0 :(得分: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
答案 1 :(得分:1)
将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'
答案 2 :(得分:0)
您可以使用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'
答案 3 :(得分:0)
可以使用df.apply()
df['column_c'] = df.apply(lambda x: x[0] if len(x[0]) > len(x[1]) else x[1])