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(级别=[…])
如何让您的试验值重复自身?我也有同样的问题,但我的价值观不会重复。