用默认值填充数据框列,其中findall不返回匹配项

时间:2018-12-03 03:46:02

标签: python pandas numpy

我正在尝试默认使用findall方法返回0或找不到任何东西的字符串值。

尝试:

df['C'] = np.where(df['A']=='123',df['B'].str.findall('listofvalues').apply(', '.join), ''), 'N/A'

和:

df['C'] = np.where(df['A']=='123',df['B'].str.findall('listofvalues').apply(', '.join), '') | df['C']='N/A'

和许多其他变体。

input  
A      B  
123    A B C  
123    B C D  
123    X Y Z  
321    E B G  
321    H I B  

desired output  
A      B        C  
123    A B C    B, C  
123    B C D    B, C  
123    X Y Z    **N/A**  
321    E B G  
321    H I B  

这有效...我只想将其合并为1行

df['C'] = np.where(df['A']=='123',df['B'].str.findall('listofvalues').apply(', '.join), ''), 'N/A'
df['C'] = np.where(df['A']=='123', df['C'].replace(r'', 'N/A'), df['C'])

1 个答案:

答案 0 :(得分:1)

值得注意的是,.str也适用于列表。可以使用.str[0].str.len大于1的值进行切片,而不是加入。

(df['B']
 .findall('listofvalues')
 .pipe(lambda s: s.where(s.str.len() >= 1, ['N/A'])
 .str[0])