在pandas中,基于两列的条件创建一个新列

5
我有一个带有两列的数据框。我想创建一个新列,并输入具有最长字符串的列。
        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个回答

3
使用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.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

可以使用 df.apply()

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

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'

哦,太好了,我读了应用文档,没有提到可以对多列进行操作。谢谢。 - B B
在轴1上,该函数将应用于所有列。在这种情况下有两列,因此可以使用x [0]和x [1]进行访问。 - Vaishali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接