假设我的数据像下面的示例一样
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
letters
和numbers
是索引,而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
其中a
,b
和c
是列,数字是唯一索引。
感谢您的帮助。
答案 0 :(得分:4)
此问题是由于您将unstack
与DataFrame
一起使用,而不是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