Python 按不同于X的索引值分组

Python 按不同于X的索引值分组,python,pandas,group-by,Python,Pandas,Group By,我有以下数据帧 balance id currency 3 1WO 1.732174 ADH 7.734906 ALX 3.854667 AMLT 4.308590 ANCT 1.259457 ...

我有以下数据帧

                             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和
货币
对余额进行分组并求和。 此外,收集多个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

首先使用
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

首先使用
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

我真的不明白你的意思。所以你想要所有ID,除了3和groupby货币?你能从样本数据中添加预期的输出吗?我已经更新了,以显示我不太明白你的意思。那么您想要所有ID(除3和groupby货币外)吗?您可以添加示例数据的预期输出吗?我已经更新以显示我想要的