фрейм данных python Значение истинности ряда неоднозначно. Используйте.empty, a.bool(), a.item(), a.any() или a.all()

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