Python 熊猫:转向柱';将值和现有列合并为多列
我试图获取一个具有重复值的现有列,并将其转换为自身的标题。然后我想使用原始标题的一部分,这样最后我将有一个多列标题 我基本上是想扭转这种局面:Python 熊猫:转向柱';将值和现有列合并为多列,python,pandas,multiple-columns,Python,Pandas,Multiple Columns,我试图获取一个具有重复值的现有列,并将其转换为自身的标题。然后我想使用原始标题的一部分,这样最后我将有一个多列标题 我基本上是想扭转这种局面: ticker PX_LAST PX_OPEN date 20000103 company1 1234 6543 20000104 company1 2345 7654 20000105 company1 3465 8765 20000106 company1
ticker PX_LAST PX_OPEN
date
20000103 company1 1234 6543
20000104 company1 2345 7654
20000105 company1 3465 8765
20000106 company1 4567 9876
20000103 company2 1 6
20000104 company2 2 7
20000105 company2 3 8
20000106 company2 4 9
为此:
ticker company1 company2
field PX_LAST PX_OPEN PX_LAST PX_OPEN
date
20000103 1234 6543 1 6
20000104 2345 7654 2 7
20000105 3465 8765 3 8
20000106 4567 9876 4 9
我一直在玩DataFrame.pivot
和DataFrame.pivot\u table
,但我想不出来
我也尝试过迭代DataFrame.iterrows()
,但我认为它太慢了,而且与前面提到的方法相比,它的可读性非常差。试试这个:
>>> (df.reset_index()
.set_index(['date','ticker'])
.unstack().swaplevel(axis='columns')
)
ticker company1 company2 company1 company2
PX_LAST PX_LAST PX_OPEN PX_OPEN
date
20000103 1234 1 6543 6
20000104 2345 2 7654 7
20000105 3465 3 8765 8
20000106 4567 4 9876 9
编辑:
谢谢,它正在工作,但我稍微更改了问题(删除了
ticker
行的重复内容)。
>>> (df.reset_index()
.set_index(['date','ticker'])
.unstack().swaplevel(axis='columns')
.sort_index(axis=1)
)
ticker company1 company2
PX_LAST PX_OPEN PX_LAST PX_OPEN
date
20000103 1234 6543 1 6
20000104 2345 7654 2 7
20000105 3465 8765 3 8
20000106 4567 9876 4 9