Редактировать : добавить объяснение
df.Comment_vol.str.strip().isin(['Pass', ''])
для удаления любых передних и задних пробелов и использует isin
, чтобы проверить, являются ли значения в столбце Comment_vol
'Pass' или ''. Я использую strip
, чтобы убедиться, что в ваших данных есть такие слова, как «Pass» или «VolA» (обратите внимание на передние и задние пробелы), они все еще работают. Это возвращает логическую серию, True
на 'Pass' или '', иначе False
. Присвойте это n
df.Comment_wt.str.strip().isin(['Pass', ''])
то же самое, но применяется к столбцу Comment_wt
и присваивается m
'~'
является оператором отрицания, ~n
означает, что любое слово ни 'Pass', ни '' в Comment_vol
np.select([n, ~n & m], [df.Comment_wt, df.Commnt_vol], df.Comment_vol.str.cat(df.Comment_wt, sep=', '))
эквивалентно логике
if n:
df.Comment_wt
elif ~n & m: #`Comment_vol` is NOT 'Pass' or '' and df.Comment_wt is 'Pass' or ''
df.Commnt_vol
else:
df.Comment_vol.str.cat(df.Comment_wt, sep=', ') #concat both columns using `,'
this np.select
возвращает массив следующим образом:
np.select([n, ~n & m], [df.Comment_wt, df.Comment_vol], df.Comment_vol.str.cat(df.Comment_wt, sep=', '))
Out[350]: array(['wtA', 'Pass', 'VolA', 'Pass', 'wtA', 'VolA, wtA'], dtype=objec
t)
этот массив используется для создания Comment_final
столбцов df
Вы можете прочитать документ np.select
для получения дополнительной информации https://docs.scipy.org/doc/numpy/reference/generated/numpy.select.html
Оригинал:
Если я правильно понимаю ваше описание и вывод, это классический случай использования np.select
n = df.Comment_vol.str.strip().isin(['Pass', ''])
m = df.Comment_wt.str.strip().isin(['Pass', ''])
df['Comment_final'] = np.select([n, ~n & m], [df.Comment_wt, df.Comment_vol], df.Comment_vol.str.cat(df.Comment_wt, sep=', '))
Out[591]:
Comment_vol Comment_wt Comment_final
0 Pass wtA wtA
1 Pass Pass
2 VolA Pass VolA
3 Pass Pass Pass
4 wtA wtA
5 VolA wtA VolA, wtA