我有以下数据框。
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
答案 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