условное обновление панд с мультииндексом - PullRequest
0 голосов
/ 12 мая 2018

Допустим, у меня есть следующий DataFrame с несколькими индексами как для индекса, так и для столбцов.

 first   x    y
 second  m    n
A  B
A0 B0    0    0
   B1    0    0
A1 B0    0    0
   B1    0    0

Я пытаюсь обновить значения с условием. Условие будет примерно таким: `Правила:

[{condition:{'A':'A0,'B':'B0'},value:5},
  {condition:{'B':'B1'},value:3},
 .....]

Я пытаюсь найти что-то похожее на

  • Используйте pandas.DataFrame.xs для Настройка Значение:

    for each rule in rules:
        df.xs((conditions.values), level=[conditions.keys]) = value
    
  • Пропустить более одного уровня на pandas.Index.get_level_values для значения настройки:

    for each rule in rules:
        df.loc[df.index.get_level_values(conditions.keys) == [conditions.values] = value
    

Результат должен быть

 first   x    y
 second  m    n
A  B
A0 B0    5    5
   B1    3    3
A1 B0    0    0
   B1    3    3`

1 Ответ

0 голосов
/ 12 мая 2018

К сожалению, выбор по dictionary в MultiIndex в пандах еще не поддерживается , поэтому вам нужна настраиваемая функция , адаптированная для вас:

rules = [{'condition':{'A':'A0','B':'B0'},'value':5},
         {'condition':{'B':'B1'},'value':3}]

for rule in rules:
    d = rule['condition']
    indexer = [d[name] if name in d else slice(None) for name in df.index.names]
    df.loc[tuple(indexer),] = rule['value']

print (df)
first   x  y
second  m  n
A  B        
A0 B0   5  5
   B1   3  3
A1 B0   0  0
   B1   3  3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...