Python:用多个索引重塑数据帧
假设我们有这样一个数据帧:Python:用多个索引重塑数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,假设我们有这样一个数据帧: In[1]: operinc_df Out[1] : ticker1 ticker2 ticker3 0 0.343573 0.654719 0.246643 1 0.186861 0.219793 0.761056 2 0.417347 0.058368 0.684918 3 0.803177 0.014781 0.896704
In[1]: operinc_df
Out[1] :
ticker1 ticker2 ticker3
0 0.343573 0.654719 0.246643
1 0.186861 0.219793 0.761056
2 0.417347 0.058368 0.684918
3 0.803177 0.014781 0.896704
4 0.294515 0.488001 0.291187
5 0.402278 0.368005 0.821096
6 0.985514 0.378000 0.929529
7 1.168360 0.729640 0.347064
8 0.025802 1.337121 0.638399
9 0.019182 2.257563 0.041164
我们还有另一个数据帧,行数和列数相同(名称相同):
我无法理解的是,如何创建另一个由opeinc_-df
和opex_-df
组成的数据框架,使其看起来像下面的数据框架(可能有两个级别的索引):
阅读并给了我一些见解(因为我也尝试先将原始数据帧转换为dicts,然后使用字典理解键打包opeinc\u df
和opex\u df
,然后使用pandas.DataFrame.from\u dict()
尝试创建基础知识_df
。然而,到目前为止,这对我来说并不奏效
您对我如何正确执行此操作有何想法?非常感谢您。您可以:
fundamentals = (operinc_df.stack().rename('operinc_df').to_frame()
.join(opex_df.stack().rename('opex_df'))
.swaplevel().sort_index())
>>> fundamentals
operinc_df opex_df
ticker1 0 0.343573 1.450770
1 0.186861 1.212298
2 0.417347 0.918931
3 0.803177 0.566981
4 0.294515 0.600614
5 0.402278 0.470118
6 0.985514 1.489904
7 1.168360 1.626853
8 0.025802 0.290340
9 0.019182 1.472838
ticker2 0 0.654719 0.227986
1 0.219793 0.406004
2 0.058368 0.677043
3 0.014781 1.155675
4 0.488001 0.872015
5 0.368005 0.730027
6 0.378000 0.522885
7 0.729640 0.142996
8 1.337121 1.175891
9 2.257563 0.107094
ticker3 0 0.246643 2.243050
1 0.761056 1.212320
2 0.684918 0.361878
3 0.896704 0.295542
4 0.291187 1.129760
5 0.821096 1.112045
6 0.929529 0.475244
7 0.347064 0.758590
8 0.638399 0.591020
9 0.041164 0.715764
您可以对转置的数据帧进行压缩
new_df = pd.concat([operinc_df.T, opex_df.T], axis = 1, keys=['operinc_df', 'opex_df']).stack()
operinc_df opex_df
ticker1 0 0.343573 1.450770
1 0.186861 1.212298
2 0.417347 0.918931
3 0.803177 0.566981
4 0.294515 0.600614
5 0.402278 0.470118
6 0.985514 1.489904
7 1.168360 1.626853
8 0.025802 0.290340
9 0.019182 1.472838
ticker2 0 0.654719 0.227986
1 0.219793 0.406004
2 0.058368 0.677043
3 0.014781 1.155675
4 0.488001 0.872015
5 0.368005 0.730027
6 0.378000 0.522885
7 0.729640 0.142996
8 1.337121 1.175891
9 2.257563 0.107094
ticker3 0 0.246643 2.243050
1 0.761056 1.212320
2 0.684918 0.361878
3 0.896704 0.295542
4 0.291187 1.129760
5 0.821096 1.112045
6 0.929529 0.475244
7 0.347064 0.758590
8 0.638399 0.591020
9 0.041164 0.715764
fundamentals = (operinc_df.stack().rename('operinc_df').to_frame()
.join(opex_df.stack().rename('opex_df'))
.swaplevel().sort_index())
>>> fundamentals
operinc_df opex_df
ticker1 0 0.343573 1.450770
1 0.186861 1.212298
2 0.417347 0.918931
3 0.803177 0.566981
4 0.294515 0.600614
5 0.402278 0.470118
6 0.985514 1.489904
7 1.168360 1.626853
8 0.025802 0.290340
9 0.019182 1.472838
ticker2 0 0.654719 0.227986
1 0.219793 0.406004
2 0.058368 0.677043
3 0.014781 1.155675
4 0.488001 0.872015
5 0.368005 0.730027
6 0.378000 0.522885
7 0.729640 0.142996
8 1.337121 1.175891
9 2.257563 0.107094
ticker3 0 0.246643 2.243050
1 0.761056 1.212320
2 0.684918 0.361878
3 0.896704 0.295542
4 0.291187 1.129760
5 0.821096 1.112045
6 0.929529 0.475244
7 0.347064 0.758590
8 0.638399 0.591020
9 0.041164 0.715764
new_df = pd.concat([operinc_df.T, opex_df.T], axis = 1, keys=['operinc_df', 'opex_df']).stack()
operinc_df opex_df
ticker1 0 0.343573 1.450770
1 0.186861 1.212298
2 0.417347 0.918931
3 0.803177 0.566981
4 0.294515 0.600614
5 0.402278 0.470118
6 0.985514 1.489904
7 1.168360 1.626853
8 0.025802 0.290340
9 0.019182 1.472838
ticker2 0 0.654719 0.227986
1 0.219793 0.406004
2 0.058368 0.677043
3 0.014781 1.155675
4 0.488001 0.872015
5 0.368005 0.730027
6 0.378000 0.522885
7 0.729640 0.142996
8 1.337121 1.175891
9 2.257563 0.107094
ticker3 0 0.246643 2.243050
1 0.761056 1.212320
2 0.684918 0.361878
3 0.896704 0.295542
4 0.291187 1.129760
5 0.821096 1.112045
6 0.929529 0.475244
7 0.347064 0.758590
8 0.638399 0.591020
9 0.041164 0.715764