【发布时间】:2017-06-03 10:14:20
【问题描述】:
我怎样才能加入由(A, B) 多索引的Series A 和由A 索引的Series B?
【问题讨论】:
我怎样才能加入由(A, B) 多索引的Series A 和由A 索引的Series B?
【问题讨论】:
目前唯一的方法是将索引放在一个共同的基础上——例如将series_A MultiIndex 的B 级别移动到一列,以便series_A 和series_B 仅由A 索引:
import pandas as pd
series_A = pd.Series(1, index=pd.MultiIndex.from_product([['A1', 'A4'],['B1','B2']], names=['A','B']), name='series_A')
# A B
# A1 B1 1
# B2 1
# A4 B1 1
# B2 1
# Name: series_A, dtype: int64
series_B = pd.Series(2, index=pd.Index(['A1', 'A2', 'A3'], name='A'), name='series_B')
# A
# A1 2
# A2 2
# A3 2
# Name: series_B, dtype: int64
tmp = series_A.to_frame().reset_index('B')
result = tmp.join(series_B, how='outer').set_index('B', append=True)
print(result)
产量
series_A series_B
A B
A1 B1 1.0 2.0
B2 1.0 2.0
A2 NaN NaN 2.0
A3 NaN NaN 2.0
A4 B1 1.0 NaN
B2 1.0 NaN
加入他们的另一种方法是从series_A 中取消堆叠B 级别:
In [215]: series_A.unstack('B').join(series_B, how='outer')
Out[215]:
B1 B2 series_B
A
A1 1.0 1.0 2.0
A2 NaN NaN 2.0
A3 NaN NaN 2.0
A4 1.0 1.0 NaN
unstack 将B 索引级别移动到列索引。因此主题是
相同(将索引放在一个共同的基础上),但结果不同。
【讨论】:
reset_index 后跟 set_index 听起来是合法的。但是,我总是想知道为什么join 对系列的操作不如对数据框的灵活。