Pandas мультииндексная группа по значению индекса, отличному от X - PullRequest
1 голос
/ 07 мая 2020

У меня есть следующий фрейм данных.

                             balance
id            currency              
3             1WO       1.732174
              ADH       7.734906
              ALX       3.854667
              AMLT      4.308590
              ANCT      1.259457
...                              ...
646902        BTC       2.000000
              ETH       1.495225
676329        BCH       0.000000
              BTC       0.000000
              ETH       3.022524

Я хотел бы сгруппировать по id, а не по 3 и currency, и суммировать балансы. Вдобавок новый сгруппированный идентификатор, собирающий несколько идентификаторов, будет называться 29. Я мог бы сделать следующее, но он пропустил дополнительное условие сбора данных индекса не в 3 и переименовал его:

groupby(['currency','app_vendor_id']).sum()

Любой вклад будет будут оценены.

Изменить:

ожидаемый результат:

                             balance
id            currency              
3             1WO       1.732174
              ADH       7.734906
              ALX       3.854667
              AMLT      4.308590
              ANCT      1.259457
...                              ...
29            BTC       2.000000
              ETH       4.517869

1 Ответ

0 голосов
/ 07 мая 2020

Сначала используйте rename для всех значений без 3 на первом уровне:

ids = df.index.levels[0]
d = dict.fromkeys(ids[ids != 3], 29)
df1 = df.rename(d, level=0)
print (df1)
              balance
id currency          
3  1WO       1.732174
   ADH       7.734906
   ALX       3.854667
   AMLT      4.308590
   ANCT      1.259457
29 BTC       2.000000
   ETH       1.495225
   BCH       0.000000
   BTC       0.000000
   ETH       3.022524

А затем используйте sum:

print (df1.sum(level=0))
      balance
id           
3   18.889794
29   6.517749

print (df1.sum(level=1))
           balance
currency          
1WO       1.732174
ADH       7.734906
ALX       3.854667
AMLT      4.308590
ANCT      1.259457
BTC       2.000000
ETH       4.517749
BCH       0.000000

print (df1.sum(level=[0,1]))
              balance
id currency          
3  1WO       1.732174
   ADH       7.734906
   ALX       3.854667
   AMLT      4.308590
   ANCT      1.259457
29 BTC       2.000000
   ETH       4.517749
   BCH       0.000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...