[英]Sum dataframes to MultiIndex
我有两个不同索引的DataFrame,如:
import pandas as pd
a = pd.DataFrame([1, 2, 3], index=['a', 'b', 'c'],
columns=['one'])
b = pd.DataFrame([5, 6], index=['d', 'e'],
columns=['two'])
我可以使用以下方法创建“笛卡尔”MultiIndex:
a_plus_b = pd.MultiIndex.from_product([a.index,b.index])
哪个转为空MultiIndex:
MultiIndex(levels=[['a', 'b', 'c'], ['d', 'e']],
labels=[[0, 0, 1, 1, 2, 2], [0, 1, 0, 1, 0, 1]])
如何创建如下的笛卡尔和?
'a' 'd' 6 # 1 + 5
'e' 7 # 1 + 6
'b' 'd' 7 # 2 + 5
'e' 8 # 2 + 6
'c' 'd' 8 # 3 + 5
'e' 9 # 3 + 6
使用第一级和第二级的reindex
:
s = a['one'].reindex(a_plus_b, level=0) + b['two'].reindex(a_plus_b, level=1)
print (s)
a d 6
e 7
b d 7
e 8
c d 8
e 9
dtype: int64
您可以通过使用pd.merge
来避免显式创建MultiIndex
的中间步骤:
res = pd.merge(a.rename_axis('A').reset_index().assign(key=1),
b.rename_axis('B').reset_index().assign(key=1), on='key')
res = res.assign(total=res['one'] + res['two'])\
.groupby(['A', 'B'])['total'].sum()
print(res)
A B
a d 6
e 7
b d 7
e 8
c d 8
e 9
Name: total, dtype: int64
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.