示例:
data={'P1_1': ['1', '6', '5','8', '4', '7', '5', '7', '1', '7', '3', '2', '1', '4', '7', '5', '7', '1'],
'P1_2':['3', '7', '7','9', '8', '10', '8', '9', '3', '10', '9', '5', '3', '8', '9', '6', '7', '5'],
'P2_1': ['1', '2', '3','4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18'],
'P2_2': ['3', '7', '7','9', '8', '10', '8', '9', '8', '10', '12', '13', '14', '8', '17', '8', '2', '5']}
df=pd.DataFrame(data)
这是我的DF。
我现在要做的是重新排列列。P1和P2是类别的名称,第二个数字_1和_2是时间点。现在,我希望通过接收值将类别显示在行中,将时间点显示在列中。它看起来应该是这样的:
在第二个例子中,我添加了第三个P,只是为了有更多的值。
我想可能有一个熟悉的方法。谁能给予我一个思考的方向?
2条答案
按热度按时间huwehgph1#
我不知道你的数据意味着什么,为什么或者你想让它变成这样,但是我可以和你分享一些使用
pandas
的技术。我希望这也许能让你朝你需要的方向前进。
预期成果:
g2ieeal72#
用途:
使用
DataFrame.pipe
通过last _ bystr.rsplit
设置MultiIndex,然后通过DataFrame.rename_axis
设置新的列名,通过DataFrame.stack
整形,使用DataFrame.add_prefix
,最后通过DataFrame.reset_index
将MultiIndex的第二级转换为列,第二个是创建默认RangeIndex
: