Python 将多索引转换为列
我有一个具有两个索引级别的数据帧:Python 将多索引转换为列,python,pandas,dataframe,flatten,multi-index,Python,Pandas,Dataframe,Flatten,Multi Index,我有一个具有两个索引级别的数据帧: value Trial measurement 1 0 13 1 3 2 4 2 0 NaN 1 12 3 0
value
Trial measurement
1 0 13
1 3
2 4
2 0 NaN
1 12
3 0 34
我想把它变成这样:
Trial measurement value
1 0 13
1 1 3
1 2 4
2 0 NaN
2 1 12
3 0 34
我怎样才能做到最好
我之所以需要它,是因为我想聚合数据,但如果将列用作索引,我就不能像这样选择列。reset_index()是一种数据帧方法,它将索引值作为列传输到数据帧中。参数的默认设置为drop=False(这将使索引值保持为列)
您只需在数据框名称后添加.reset_index(inplace=True)
:
df.reset_index(inplace=True)
这并不适用于你的情况,但可能有助于其他人(比如我5分钟前)了解。如果一个人的多重索引具有如下相同的名称:
value
Trial Trial
1 0 13
1 3
2 4
2 0 NaN
1 12
3 0 34
df.reset\u index(inplace=True)
将失败,因为创建的列不能具有相同的名称
因此,您需要使用df.index=df.index.set_name(['Trial','measurement'])重命名multindex以获得:
value
Trial measurement
1 0 13
1 1 3
1 2 4
2 0 NaN
2 1 12
3 0 34
然后,df.reset\u index(inplace=True)
将像一个符咒一样工作
在一个名为live\u date
的日期时间列(非索引)上按年和月分组后,我遇到了这个问题,这意味着年和月都被命名为live\u date
,,如注释中提到的@cs95,要仅删除一个级别,请使用:
df.reset_索引(级别=[…])
这避免了在重置后必须重新定义所需的索引。我也遇到了Karl的问题。我刚刚发现自己重命名了聚合列,然后重置了索引
df = pd.DataFrame(df.groupby(['arms', 'success'])['success'].sum()).rename(columns={'success':'sum'})
可能存在无法使用df.reset_index()
的情况(例如,当您也需要索引时)。在这种情况下,使用index.get_level_values()
直接访问索引值:
df['Trial']=df.index.get_level_值(0)
df['measurement']=df.index.get_level_值(1)
这将为各个列指定索引值,并保留索引
df = pd.DataFrame(df.groupby(['arms', 'success'])['success'].sum()).rename(columns={'success':'sum'})
有关更多信息,请参阅。重复:您想要第一个建议.reset_index()
非常感谢,我实际上为此浏览了很多次,但是“将多索引设置为列”和类似的查询总是让我得到一些线程,这些线程想要旋转它们的数据帧……当您已经知道答案时,总是更容易找到答案:)对于我的情况,我有3个索引级别,reset不起作用。另一种方法是将新重置的数据帧分配给一个新的数据帧:df2=df.reset_index()若要仅重置特定级别,请使用df.reset_index(级别=[…])
如何让您的试验值重复自身?我也有同样的问题,但我的价值观不会重复。