Неверный ключ Фрейма данных Pandas

#python #pandas #dataframe

Вопрос:

 df.loc[(df['Original Price'] != '0') amp; (df['Old Original Price'] != '0'), 'Price Difference'].index = df['Original Price'] - df['Old Original Price']  

В настоящее время я пытаюсь сравнить два столбца фрейма данных, и если их значение не равно 0, они создадут новый столбец и произведут вычитание между двумя значениями

хотя я, кажется, продолжаю получать ошибку, упомянутую ниже:

 TypeError: '(Series([], dtype: bool), 'Price Difference')' is an invalid key  

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

1. Похоже, ты пропал loc без вести . Вы не можете выбрать как индекс, так и столбцы без loc или iloc -gt; df.loc[(df['Original Price'] != '0') amp; (df['Old Original Price'] != '0'), 'Price Difference'] = df['Original Price'] - df['Old Original Price']

2. Да, я пробовал это, но дело в том, что для этого им нужен ключ, и я намерен собрать всех, кто находится в столбце «первоначальная цена» и «старая первоначальная цена», то есть != 0. Следовательно, я не могу указать конкретную строку

3. Как насчет фрагмента кода в моем комментарии, который работает не так, как ожидалось?

Ответ №1:

Вы можете попробовать:

 df.loc[((df['Original Price'] != '0') amp; (df['Old Original Price'] != '0')),'Price_Difference'] = df['Original Price'] - df['Old Original Price']  

Ответ №2:

Мне нужно увидеть пример того, как выглядят ваши данные и каковы типы данных ваших столбцов, но, основываясь на том, что вы упомянули, вот что я предлагаю:

 df['Price Difference']= df['Original Price'] df.loc[((~df['Original Price'].isin(['0'])) amp; (~df['Old Original Price'].isin(['0']))), 'Price Difference']= df['Original Price'] - df['Old Original Price']   

Ответ №3:

Попробуй это

 df[Price Difference] =df.apply(function,axis=1)  

И напишите логику в методе

 function(row):  {  if (row['Original Price'] != '0') amp; (row['Old Original Price'] !=   '0'):  return row['Original Price'] - row['Old Original Price']  }   

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

1. Это не то, как функции определяются в python. DataFrame.apply также не будет обрабатывать невозврат, так как параметр с расширением вам нужно будет обрабатывать все случаи, если применять итеративно.

2. Пожалуйста, поделитесь образцом ваших данных.