我正在尝试默认使用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'])
答案 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])