我有两个看起来像下面的数据框
Datframe A:
dataDate name prediction
2018-09-30 A 2.30
2018-10-01 A 1.51
2018-10-02 A 2.08
2018-10-03 A 1.82
2018-09-30 B 0.96
2018-10-01 B 6.52
2018-10-02 B 9.21
2018-10-03 B 17.43
2018-09-30 C 6.89
2018-10-01 C 6.10
2018-10-02 C 5.53
2018-10-03 C 1.91
我想在列中创建层次结构索引时转换数据框架,以便我可以同时访问几个列。因此,例如:-
数据框B:
dataDate prediction
Group pred
2018-09-30 A 2.30
2018-10-01 A 1.51
2018-10-02 A 2.08
2018-10-03 A 1.82
2018-09-30 B 0.96
2018-10-01 B 6.52
2018-10-02 B 9.21
2018-10-03 B 17.43
2018-09-30 C 6.89
2018-10-01 C 6.10
2018-10-02 C 5.53
2018-10-03 C 1.91
数据框B仅具有两列“ dataDate”和“ prediction”,然后预测具有“ level 1”两列“ Group”和“ pred”。现在,我只需预测即可访问它们。
请帮助我用熊猫将数据框B从数据框A转换为反之吗?
答案 0 :(得分:3)
如有必要,请在第一列中使用set_index
至DatatimeIndex
,然后通过MultiIndex.from_product
分配新的MultiIndex
:
df = df.set_index('dataDate')
df.columns = pd.MultiIndex.from_product([['prediction'],['Group','pred']])
#alternative
#df.columns = [['prediction'] * len(df.columns),['Group','pred']]
print (df)
prediction
Group pred
dataDate
2018-09-30 A 2.30
2018-10-01 A 1.51
2018-10-02 A 2.08
2018-10-03 A 1.82
2018-09-30 B 0.96
2018-10-01 B 6.52
2018-10-02 B 9.21
2018-10-03 B 17.43
2018-09-30 C 6.89
2018-10-01 C 6.10
2018-10-02 C 5.53
2018-10-03 C 1.91
对于转换,我建议不要在第一级中更改列名称,仅定义新级别Group
:
df1 = df.set_index('dataDate')
df1.columns = pd.MultiIndex.from_product([['Group'],df1.columns])
print (df1)
Group
name prediction
dataDate
2018-09-30 A 2.30
2018-10-01 A 1.51
2018-10-02 A 2.08
2018-10-03 A 1.82
2018-09-30 B 0.96
2018-10-01 B 6.52
2018-10-02 B 9.21
2018-10-03 B 17.43
2018-09-30 C 6.89
2018-10-01 C 6.10
2018-10-02 C 5.53
2018-10-03 C 1.91
df = df1['Group'].copy()
print (df)
name prediction
dataDate
2018-09-30 A 2.30
2018-10-01 A 1.51
2018-10-02 A 2.08
2018-10-03 A 1.82
2018-09-30 B 0.96
2018-10-01 B 6.52
2018-10-02 B 9.21
2018-10-03 B 17.43
2018-09-30 C 6.89
2018-10-01 C 6.10
2018-10-02 C 5.53
2018-10-03 C 1.91