#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)