总结:
1.stack: 将数据的列索引转换为行索引(列索引可以简单理解为列名)
2.unstack:将数据的行索引转换为列索引
3.stack和unstack默认操作为最内层,可以用level参数指定操作层.
4.stack和unstack默认旋转轴的级别将会成果结果中的最低级别(最内层)
5.stack转换dataframe时,若只有一层列索引则转换后的类型为series,否则为dataframe
unstack转换dataframe时,若只有一层行索引,情况同上
import pandas as pd df = pd.DataFrame({ '类别':['水果'] * 3 + ['蔬菜'] * 3 , '名称':['苹果','梨','杏','菠菜','黄瓜','茄子'], '价格':[7,8,9,10,11,12]}) print(df) print(df.stack()) # 如下实现了行索引是类别,列索引是名称,交点处是价格 df.set_index(['类别','名称'], inplace=True) print(df.unstack()) # 类别 名称 价格 # 0 水果 苹果 7 # 1 水果 梨 8 # 2 水果 杏 9 # 3 蔬菜 菠菜 10 # 4 蔬菜 黄瓜 11 # 5 蔬菜 茄子 12 # 0 类别 水果 # 名称 苹果 # 价格 7 # 1 类别 水果 # 名称 梨 # 价格 8 # 2 类别 水果 # 名称 杏 # 价格 9 # 3 类别 蔬菜 # 名称 菠菜 # 价格 10 # 4 类别 蔬菜 # 名称 黄瓜 # 价格 11 # 5 类别 蔬菜 # 名称 茄子 # 价格 12 # dtype: object # 价格 # 名称 杏 梨 苹果 茄子 菠菜 黄瓜 # 类别 # 水果 9.0 8.0 7.0 NaN NaN NaN # 蔬菜 NaN NaN NaN 12.0 10.0 11.0