Python 将df重塑为多索引并沿关键点连接
我有一个名为“df1”的数据帧: 并希望将其重塑为: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相同,但值不同,我希望将它们沿每个键连接起来,以获得如下最终输出:
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