pandas:将列的值和现有列变成multi-columns
pandas: turn column's values and existing columns into multi-columns
我正在尝试获取具有重复值的现有列,并将其转换为自身的 header。然后我想用一部分原来的header,这样最后我就有了一个multi-columns header.
我基本上是想转这个:
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_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
编辑:
>>> (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
我正在尝试获取具有重复值的现有列,并将其转换为自身的 header。然后我想用一部分原来的header,这样最后我就有了一个multi-columns header.
我基本上是想转这个:
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_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
编辑:
>>> (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