我有三个多索引熊猫数据帧-
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)
答案 0 :(得分:2)
将concat
与MultiIndex
一起使用,索引级别为zip
和year
,将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