我有三个多索引 Pandas 数据框 -
df1 = {('parity', np.nan): {('20194', 1990): 0.3333333333333333,
('22204', 1990): 0.0,
('24060', 1990): 0.3333333333333333},
('parity', 0.0): {('20194', 1990): 0.0,
('22204', 1990): 0.0,
('24060', 1990): 0.3333333333333333},
('parity', 1.0): {('20194', 1990): 0.3333333333333333,
('22204', 1990): 1.0,
('24060', 1990): 0.0},
('parity', 2.0): {('20194', 1990): 0.3333333333333333,
('22204', 1990): 0.0,
('24060', 1990): 0.3333333333333333},
('education', 0.0): {('20194', 1990): 0.3333333333333333,
('22204', 1990): 0.6666666666666666,
('24060', 1990): 0.6666666666666666},
('education', 1.0): {('20194', 1990): 0.6666666666666666,
('22204', 1990): 0.3333333333333333,
('24060', 1990): 0.3333333333333333}}
df1 = pd.DataFrame(data = df1)
df2 = {('parity', 'zip'): {0: '20194', 1: '22204', 2: '24060'},
('parity', 'year'): {0: 1990, 1: 1990, 2: 1990},
('parity', 'parity'): {0: 1.5, 1: 1.0, 2: 1.0}}
df2 = pd.DataFrame(data = df2)
df3 = {'parity': {('20194', 1990): 1.5, ('22204', 1990): 1.0, ('24060', 1990): 1.0},
'education': {('20194', 1990): 0.6666666666666666,
('22204', 1990): 0.3333333333333333,
('24060', 1990): 0.3333333333333333}}
df3 = pd.DataFrame(data = df3)
最佳答案
使用concat
索引中具有 zip
和 year
级别的 MultiIndex
以及列中具有 2 个级别的 MultiIndex
:
#convert columns to MultiIndex in index
df2 = df2.set_index([('parity','zip'),('parity','year')])
#created new MultiIndex in columns
df3.columns = pd.MultiIndex.from_product([df3.columns, ['new']])
df = pd.concat([df1, df2, df3],axis=1).rename_axis(['zip','year'])
print (df)
parity education parity \
NaN 0.0 1.0 2.0 0.0 1.0 parity
zip year
20194 1990 0.333333 0.000000 0.333333 0.333333 0.333333 0.666667 1.5
22204 1990 0.000000 0.000000 1.000000 0.000000 0.666667 0.333333 1.0
24060 1990 0.333333 0.333333 0.000000 0.333333 0.666667 0.333333 1.0
education
new new
zip year
20194 1990 1.5 0.666667
22204 1990 1.0 0.333333
24060 1990 1.0 0.333333
关于python - 合并多索引 Pandas 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60263064/