вставить значение в новый столбец из другого столбца на основе критериев из другого столбца

#python #pandas

#python #pandas

Вопрос:

    ColA                      ColB
0   Vendor account :         TX-8888881
1   Invoice account :        sdfhsa
2   NaN                      NaN
3   2020-11-01 00:00:00      NaN
4   Vendor account :         TX-8888885
 

У меня есть 2 столбца, как указано выше, я хочу создать новый столбец, который имеет значение из столбца ‘ColB’, если в ‘ColA’ есть значение ‘Учетная запись поставщика:’, в противном случае Nan.

Требуемая таблица будет выглядеть следующим образом.

    ColA                      ColB            VendorAccount
0   Vendor account :         TX-8888881      TX-8888881
1   Invoice account :        sdfhsa
2   NaN                      NaN
3   2020-11-01 00:00:00      NaN
4   Vendor account :         TX-8888885      TX-8888885
 

Я использую код
df['VendorAcount']= np.where(df['ColA'] == 'Vendor account :' , df['ColB'] , np.nan)

Комментарии:

1. Ваше решение супер, не работает?

2. да, не работает

3. df['VendorAcount']= np.where(df['ColA'].astype(str) == 'Vendor account :' , df['ColB'] , np.nan) . Просто добавьте .astype(str)

Ответ №1:

Я думаю, вам нужны тестовые подстроки с помощью Series.str.contains :

 df['VendorAcount']= np.where(df['ColA'].str.contains('Vendor account'), df['ColB'], np.nan)
 

Или начало строк по Series.str.startswith :

 df['VendorAcount']= np.where(df['ColA'].str.startswith('Vendor account'),df['ColB'], np.nan)
 

Ответ №2:

Вы также можете попробовать преобразовать это значение в .astype(str)

 df['VendorAcount']= np.where(df['ColA'].astype(str) == 'Vendor account :' , df['ColB'] , np.nan)