熊猫多索引按与X不同的索引值分组

时间:2020-05-07 07:04:38

标签: python pandas group-by

我有以下数据框。

                             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分组,然后将余额相加。 此外,收集了多个ID的新分组ID将称为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 :(得分:0)

首先在所有级别中将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