Как суммировать все значения с одним индексом больше X в MultiIndexed Datarfame, группируя по другим индексам? - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь сделать то же самое, что описано в этом посте , но с мультииндексированным пандой данных Pandas.Я пытался адаптировать ответ к другому посту, чтобы он работал с моим DataFrame, но безуспешно.

В настоящее время у меня есть следующий DataFrame, где target, wt и msнаходятся в индексе:

                percent
target  wt  ms  
g1      2   1   2
            2   5
            ... ...
            620 0.003
            630 0.005
... ... ... ... ... 
g9      8   1   4
            2   8
            ... ...
            470 0.005
            480 0.004

Мне нужно ограничить диапазон ms некоторым числом, скажем, 12, и суммировать значения в столбце percent, где ms>12, сгруппированы поиндексы target и wt.

Результат, который я хочу, выглядел бы примерно так:

                percent
target  wt  ms  
g1      2   1   2
            2   5
            ... ...
            >12 5.4
... ... ... ... ... 
g9      8   1   4
            2   8
            ... ...
            >12 7.3

Как я могу это сделать?

1 Ответ

0 голосов
/ 04 декабря 2018

Сначала создайте логическую маску по уровню ms на get_level_values по сравнению со скаляром.Затем отфильтруйте строки по boolean indexing и sum за первые 2 уровня.Он потерял уровень ms, поэтому к нему добавляются assign и set_index.

Последнее объединение concatс фильтрацией строк с инвертированной маской по ~ и sort_index:

mask = df.index.get_level_values('ms') > 12
df1 = df[mask].sum(level=[0,1]).assign(ms='>12').set_index('ms', append=True)

df = pd.concat([df[~mask], df1]).sort_index()
print (df)
               percent
target wt ms          
g1     2  1      2.000
          2      5.000
          >12    0.008
g9     8  1      4.000
          2      8.000
          >12    0.009
...