以另外两个列pandas为条件创建新列

时间:2019-03-29 02:27:33

标签: python pandas

我有一个包含两列的数据框。我想创建一个新列并输入具有最长字符串的列。所以

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

很感谢任何帮助。

4 个答案:

答案 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.wherestr.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])