Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:用多个索引重塑数据帧_Python_Pandas_Dataframe - Fatal编程技术网

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