我有一个包含2列的数据框,所有值都是字符串。
我想比较列,如果第二列字符串比第一列长,则将第一列替换为第二列值。
例如,如果df.iloc[0,0] = 'apple'
和df.iloc[0,1] = 'banana'
,则df.iloc[0,0]
将被替换为'banana
'
我将不胜感激。 =]
答案 0 :(得分:2)
用Series.str.len
进行比较,并在numpy.where
和DataFrame.iloc
中设置值以按位置选择:
df = pd.DataFrame({'a':['apple','orange'], 'b':['banana','pear']})
print (df)
a b
0 apple banana
1 orange pear
mask = df.iloc[:,0].str.len() > df.iloc[:,1].str.len()
df.iloc[:,0] = np.where(mask, df.iloc[:,0], df.iloc[:,1])
#alternative
#df.iloc[~mask.to_numpy(),0] = df.iloc[:,1]
print (df)
a b
0 banana banana
1 orange pear
如果可能,请使用列标签:
mask = df['a'].str.len() > df['b'].str.len()
df['a'] = np.where(mask, df['a'], df['b'])
#alternative
#df.loc[~mask, 'a'] = df['b']