我有一个名为" df1":
的数据框 0 1 2
2015-10-13 96 97.0 59.0
2008-03-18 90 91.0 92.0
并希望将其重塑为:
0
2015-10-13 96
97.0
59.0
2008-03-18 90
91.0
92.0
此外,我还有第二个名为" df2" ,它与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
答案 0 :(得分:2)
如果您在索引中有额外的级别,那么这应该可以帮助您:
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)
答案 1 :(得分:2)
您可以使用concat
按参数keys
+ stack
定义新列名:
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
要删除第二级索引,请添加reset_index
:
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
答案 2 :(得分:2)
您可以将列表理解传递给gci 'C:\temp\stack' | Rename-Item -NewName {$_.Name -replace ':','.' } -whatIf
。然后将结果传递给numpy.column_stack
pd.DataFrame