我有一个具有2个索引级别的数据框架:

                         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 

我怎样才能做到最好呢?

我需要这样做是因为我想按照这里的指示聚合数据,但是如果我的列被用作索引,我就不能这样选择它们。


当前回答

当不是每个列都有多个索引级别时,一个解决方案可能会有帮助:

df.columns = df.columns.map(''.join)

其他回答

当不是每个列都有多个索引级别时,一个解决方案可能会有帮助:

df.columns = df.columns.map(''.join)

类似于更广义的Alex解。它保持索引不变,并将索引级别添加为具有其名称的新列。

for i in df.index.names:
    df[i] = df.index.get_level_values(i)

这给了

                   value Trial    measurement
Trial measurement             
    1           0     13     1              0     
                1      3     1              1     
                2      4     1              2     
  ...  

简短而简单

df2 = pd.DataFrame({'test_col': df['test_col'].describe()})
df2 = df2.reset_index()

可能会出现df.reset_index()不能使用的情况(例如,当你也需要索引时)。在这种情况下,使用index.get_level_values()直接访问索引值:

df['Trial'] = df.index.get_level_values(0)
df['measurement'] = df.index.get_level_values(1)

这将为各个列分配索引值并保留索引。

更多信息请参见文档。

我也遇到了卡尔的问题。我只是重新命名了聚合列,然后重新设置了索引。

df = pd.DataFrame(df.groupby(['arms', 'success'])['success'].sum()).rename(columns={'success':'sum'})

df = df.reset_index()