Редактирование данных с помощью условных функций в пределах pandas Multi index - PullRequest
1 голос
/ 16 января 2020

Я довольно новичок в pandas и пытаюсь изменить значения в сводной таблице, используя несколько условий.

У меня есть приведенная ниже сводная таблица, я пытаюсь редактировать данные для рабочего стола И мобильный по цене. Они являются взаимоисключающими, поэтому, если учетная запись имеет стоимость по сравнению с Desktop, она получает Mobile бесплатно (и стоимость mobile должна быть обнулена), а если для рабочего стола 0, то Mobile должно быть 25.

* Код 1006 *

для сводной таблицы выглядит следующим образом

cost_merge = pd.pivot_table(cost_merge, values=['Cost'], 
index=['ID', 'First Name', 'Last Name', 'Account Number', 'Creation Date', 'Country/Region'], 
columns=['Service Name'], fill_value=0)

при попытке использовать df.lo c для формирования условного выражения KeyError

Когда я запускаю cost_merge.columns.levels, я получаю FrozenList([['Cost'], ['1', 'Desktop', 'Mobile', '4', '5']]), но Я не могу использовать его для логики c Я хочу.

Я ' мне бы хотелось, чтобы конечный результат выглядел следующим образом:

enter image description here

Чувствую, что я прошел через каждый поток pandas на SO, чтобы попытаться получить ответ, поэтому извиняюсь, если об этом уже спрашивали.

Как я уже говорил, я относительно новичок в pandas, поэтому, если что-то не сформировалось наиболее оптимальным образом, пожалуйста, дайте мне знать, чтобы я мог исправить.

1 Ответ

1 голос
/ 16 января 2020

Использование .loc с мультииндексом может быть сложным, но оно все равно должно работать в этой ситуации в сочетании с for l oop:

for i in cost_merge.index:
    if cost_merge.loc[i, ('Cost', 'Desktop')] == 25:
        cost_merge.loc[i, ('Cost', 'Mobile')] = 0

Это итерирует по индексу и проверяет, равно ли значение стоимости рабочего стола 25, если да, то устанавливает мобильную стоимость на 0.

...