根据索引值创建列

时间:2019-04-05 15:15:52

标签: python python-3.x pandas

假设我的数据像下面的示例一样

idx = pd.MultiIndex.from_product([[1, 2, 3, 4, 5, 6], ['a', 'b', 'c']],
                                 names=['numbers', 'letters'])
col = ['Value']

df = pd.DataFrame(list(range(18)), idx, col)

print(df.unstack())

输出将为

            Value        
letters     a   b   c
numbers              
1           0   1   2
2           3   4   5
3           6   7   8
4           9  10  11
5          12  13  14
6          15  16  17

lettersnumbers是索引,而Value是唯一的列

问题是如何用名为索引Value的列替换letters列?

所以我想得到这样的输出

numbers     a   b   c         
1           0   1   2
2           3   4   5
3           6   7   8
4           9  10  11
5          12  13  14
6          15  16  17

其中abc是列,数字是唯一索引。

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

此问题是由于您将unstackDataFrame一起使用,而不是pd.Series

df.Value.unstack().rename_axis(None,1)
Out[151]: 
          a   b   c
numbers            
1         0   1   2
2         3   4   5
3         6   7   8
4         9  10  11
5        12  13  14
6        15  16  17

答案 1 :(得分:1)

Wen-Ben的答案使您无法首先进入具有多个列级别的数据框。

如果您仍然碰巧遇到了多索引列,则可以使用.droplevel()来摆脱它:

df = df.unstack()
df.columns = df.columns.droplevel()

df

Out[7]: 
letters   a   b   c
numbers            
1         0   1   2
2         3   4   5
3         6   7   8
4         9  10  11
5        12  13  14
6        15  16  17