Заполните столбец dataframe значением по умолчанию, где findall не возвращает совпадений - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь установить строковое значение по умолчанию, где метод 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 голосов
/ 03 декабря 2018

Приятно отметить, что .str также работает со списками.Вместо объединения вы можете нарезать .str[0] на значения, где .str.len больше единицы.

(df['B']
 .findall('listofvalues')
 .pipe(lambda s: s.where(s.str.len() >= 1, ['N/A'])
 .str[0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...