Python 如何在数据帧中还原\展开多索引
我快要发疯了。我有这样一个数据帧:Python 如何在数据帧中还原\展开多索引,python,pandas,pivot-table,multi-index,Python,Pandas,Pivot Table,Multi Index,我快要发疯了。我有这样一个数据帧: subject sessionIndex screenIndex index key time s019 1 3 1 Shift 0.3442 s019 1 3 2 Shift.t 0.1514 s019 1 3 3 h 0.0
subject sessionIndex screenIndex index key time
s019 1 3 1 Shift 0.3442
s019 1 3 2 Shift.t 0.1514
s019 1 3 3 h 0.0844
s019 1 3 4 e 0.1127
s019 1 3 5 space 0.1201
s091 3 5 821 h 0.1126
s091 3 5 822 a 0.1425
s091 3 5 823 n 0.0926
s091 3 5 824 d 0.1525
subject sessionIndex screenIndex index Shift Shift.t a d ...
s019 1 3 1 0.3442 NaN NaN NaN ...
s019 1 3 2 NaN 0.1514 NaN NaN ...
s019 1 3 3 NaN NaN NaN NaN ...
s019 1 3 4 NaN NaN NaN NaN ...
s019 1 3 5 NaN NaN NaN NaN ...
s091 3 5 821 NaN NaN NaN NaN ...
s091 3 5 822 NaN NaN 0.1425 NaN ...
s091 3 5 823 NaN NaN NaN NaN ...
s091 3 5 824 NaN NaN NaN 0.1525 ...
使用后:
pivot_table(data,values='time', rows=['subject','sessionIndex','screenIndex','index'], cols=['key'])
我有以下数据帧:
key Shift Shift.t a d ...
subject sessionIndex screenIndex index
s019 1 3 1 0.3442 NaN NaN NaN ...
2 NaN 0.1514 NaN NaN ...
3 NaN NaN NaN NaN ...
4 NaN NaN NaN NaN ...
5 NaN NaN NaN NaN ...
s091 3 5 821 NaN NaN NaN NaN ...
822 NaN NaN 0.1425 NaN ...
823 NaN NaN NaN NaN ...
824 NaN NaN NaN 0.1525 ...
这很好,但我一直坚持“展开”多索引,因此我的数据帧如下所示:
subject sessionIndex screenIndex index key time
s019 1 3 1 Shift 0.3442
s019 1 3 2 Shift.t 0.1514
s019 1 3 3 h 0.0844
s019 1 3 4 e 0.1127
s019 1 3 5 space 0.1201
s091 3 5 821 h 0.1126
s091 3 5 822 a 0.1425
s091 3 5 823 n 0.0926
s091 3 5 824 d 0.1525
subject sessionIndex screenIndex index Shift Shift.t a d ...
s019 1 3 1 0.3442 NaN NaN NaN ...
s019 1 3 2 NaN 0.1514 NaN NaN ...
s019 1 3 3 NaN NaN NaN NaN ...
s019 1 3 4 NaN NaN NaN NaN ...
s019 1 3 5 NaN NaN NaN NaN ...
s091 3 5 821 NaN NaN NaN NaN ...
s091 3 5 822 NaN NaN 0.1425 NaN ...
s091 3 5 823 NaN NaN NaN NaN ...
s091 3 5 824 NaN NaN NaN 0.1525 ...
我已经尝试过重新索引和索引重置。我对熊猫和蟒蛇还比较陌生,所以也许我只是太笨了。请告诉我这里缺少什么,谢谢。这只是熊猫中的一个显示选项 尝试在导入熊猫后立即添加此行:
pandas.set\u printpoptions(multi\u sparse=False)
我不知道你说的“展开”是什么意思。尽管出于显示目的而隐藏了重复标记,但它们仍然存在。但也许您希望这四个多索引级别是普通列——在这种情况下,它们将按照您指定的方式显示,并且在某些方面更易于处理。在这种情况下,只需使用df.reset_index()
.Hi Dan,thx的结果作为您的回复。我已经试过了。问题是,该命令还将所有变量恢复为案例。所以我的数据和以前一样,叫做pivot_table.Hmm。真令人惊讶。您确定要对pivot_表的结果执行reset_index,而不是对原始数据帧执行reset_index吗?我快发疯了。看来你是对的。我添加了一个临时变量来存储pivot_表的结果,现在它似乎可以工作了!大THX永远不会独自解决这个问题!你好,保罗,谢谢你的回复。我的问题实际上不是格式问题。我想使用这些列来执行一些选择器。在多索引中连接列时,这要困难得多。因此,我想还原索引列。@user2675976我认为最好保留索引。dataframe.select
方法可以非常有效地执行对multi-index
的乘法值的选择(例如,subset=df.select(lambda x:x[0]='S019'和[3,5]和[3]中的s[2])Thx Paul.我解决了我的问题。因为我想在之后使用不同的选择标准:train=data[data['subject']==user]train=train[train['sessionIndex']==1],所以恢复inices似乎更容易。