Python Pandas: Как установить значение ячейки на основе формулы

1

Я пытаюсь установить значение одной ячейки в большой части данных на основе формулы из других ячеек в другом месте в df. Здесь ключевая часть кода:

df.loc[df['Category'] == 'Total', 'Tot Wgt'] = df.loc[df['Category'] == 'B', 'Wgt']

Таким образом, в строке, где "Категория" является "Итогом", я хочу, чтобы столбец "Tot Wgt" был настроен на то, что "B" и "Wgt" равны. Однако мой код выше просто выводит пробел. Есть идеи?

ИЗМЕНИТЬ ДОБАВИТЬ

(Простая версия) Dataframe выглядит примерно так:

Index    Category    Wgt    Tot Wgt
0        A           5
1        B           2
2        C           11
3        Total              2

Все элементы столбца "Категория" уникальны.

  • 2
    Ожидается, потому что разные логические маски в обе стороны.
  • 1
    Покажите нам образец кадра данных
Показать ещё 1 комментарий
Теги:
pandas

1 ответ

1
Лучший ответ

Я считаю, что нужны values чтобы избежать выравнивания индекса:

df = pd.DataFrame({'A':list('abcdef'),
                   'Category':['A','B','C','D','E', 'Total'],
                   'Wgt':[5,3,6,9,2,4],})

print (df)
   A Category  Wgt
0  a        A    5
1  b        B    3
2  c        C    6
3  d        D    9
4  e        E    2
5  f    Total    4

df.loc[df['Category'] == 'Total', 'Tot Wgt'] = df.loc[df['Category'] == 'B', 'Wgt'].values
print (df)
   A Category  Wgt  Tot Wgt
0  a        A    5      NaN
1  b        B    3      NaN
2  c        C    6      NaN
3  d        D    9      NaN
4  e        E    2      NaN
5  f    Total    4      3.0

Детали:

Если индексы различны и требуется присвоение строк, получаем NaN.

print (df.loc[df['Category'] == 'B'])
   A Category  Wgt
1  b        B    3 <-index is 1

print (df.loc[df['Category'] == 'Total'])
   A Category  Wgt
5  f    Total    4 <-index is 5
  • 1
    Boom. Это решило это!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню