Python 将df重塑为多索引并沿关键点连接

Python 将df重塑为多索引并沿关键点连接,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个名为“df1”的数据帧: 并希望将其重塑为: 0 2015-10-13 96 97.0 59.0 2008-03-18 90 91.0 92.0 此外,我还有一个称为“df2”的第二个df,它的索引与df1相同,但值不同,我希望将它们沿每个键连接起来,以获得如下最终输出:

我有一个名为“df1”的数据帧:

并希望将其重塑为:

             0         
2015-10-13   96   
             97.0    
             59.0   

2008-03-18   90   
             91.0    
             92.0   
此外,我还有一个称为“df2”的第二个df,它的索引与df1相同,但值不同,我希望将它们沿每个键连接起来,以获得如下最终输出:

             0        1    
2015-10-13   96       93
             97.0     105
             59.0     123

2008-03-18   90       26
             91.0     36
             92.0     45

如果你对索引中的一个额外级别感到满意,那么这将使你达到目标:

import pandas

data = {'0': {'2008-03-18': 90, '2015-10-13': 96},
        '1': {'2008-03-18': 91.0, '2015-10-13': 97.0},
        '2': {'2008-03-18': 92.0, '2015-10-13': 59.0}}

df1 = pandas.DataFrame(data)
df2 = df1

result = pandas.concat([df1.stack(), df2.stack()], axis=1)
结果是

                 0     1
2008-03-18 0  90.0  90.0
           1  91.0  91.0
           2  92.0  92.0
2015-10-13 0  96.0  96.0
           1  97.0  97.0
           2  59.0  59.0
如@c所述ᴏʟᴅsᴘᴇᴇᴅ 在注释中,您可以使用

flat_result = result.reset_index(level=1, drop=True)
您可以使用with通过参数
键定义新列名
+:


对于删除第二级索引,请添加:


您可以将列表理解传递到
numpy.column\u堆栈中
。然后将结果传递给
pd.DataFrame

pd.DataFrame(
    np.column_stack([d.values.ravel() for d in [df1, df2]]),
    df1.index.repeat(df1.shape[1])
)

               0      1
2015-10-13  96.0   93.0
2015-10-13  97.0  105.0
2015-10-13  59.0  123.0
2008-03-18  90.0   26.0
2008-03-18  91.0   36.0
2008-03-18  92.0   45.0

一个
.reset\u索引(level=1,drop=1)
应该去掉这个额外的level.nice我更喜欢drop=True而不是drop=1
df3 = pd.concat([df1, df2], axis=1, keys=(0,1)).stack()
#data borrowed from another answer
print (df3)

                 0     1
2008-03-18 0  90.0  90.0
           1  91.0  91.0
           2  92.0  92.0
2015-10-13 0  96.0  96.0
           1  97.0  97.0
           2  59.0  59.0
df3 = pd.concat([df1, df2], axis=1, keys=('a','b')).stack()
print (df3)

                 a     b
2008-03-18 0  90.0  90.0
           1  91.0  91.0
           2  92.0  92.0
2015-10-13 0  96.0  96.0
           1  97.0  97.0
           2  59.0  59.0
df3 = pd.concat([df1, df2], axis=1, keys=(0,1)).stack().reset_index(level=1, drop=True)
print (df3)

               0     1
2008-03-18  90.0  90.0
2008-03-18  91.0  91.0
2008-03-18  92.0  92.0
2015-10-13  96.0  96.0
2015-10-13  97.0  97.0
2015-10-13  59.0  59.0
pd.DataFrame(
    np.column_stack([d.values.ravel() for d in [df1, df2]]),
    df1.index.repeat(df1.shape[1])
)

               0      1
2015-10-13  96.0   93.0
2015-10-13  97.0  105.0
2015-10-13  59.0  123.0
2008-03-18  90.0   26.0
2008-03-18  91.0   36.0
2008-03-18  92.0   45.0