#python #pandas #dataframe
Вопрос:
Мне нужно добавить данные в столбец из другого столбца, только если оба столбца не имеют одинаковых значений.
...
regex = "|".join(v)
contains_data = df[header].astype(str).str.replace(" ", "")
.str.lower().str.contains(regex.lower())
null_data = df[k].isna()
if len(df[contains_data amp; ~null_data]):
print(df[[k, header]])
df.loc[contains_data amp; ~null_data, k] = df[k] "," df[header] if df[k] != df[header] else df[k]
Этот фильтр df[contains_data amp; ~null_data]
выводит следующие данные:
shipping_tag (k) Shipping (header)
4 Free shipping Free shipping
Поскольку это два одинаковых значения, я хочу сохранить только предыдущее.
Но я получаю эту ошибку:
The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Как я могу это исправить?
Комментарии:
1.
df.loc[(contains_data) amp; (~null_data), k]
Я думаю, это из-за этого?
Ответ №1:
Один из способов достичь того, что вам нужно (обновить k, если заголовок не равен), — это определить для него функцию:
def f(x):
if x['k'] != x['header']:
return x['k'] "," x['header']
else:
return x['k']
а затем примените его к фрейму данных при любых условиях, при которых вы хотите это сделать
df['k']=df.apply(lambda x : f(x), axis=1)