使用pd.pivot()/pd.pivot_table()转置DataFrame报错,操作哪里有误?
问题原因
你调用pivot_table时参数使用不符合要求,才会抛出Grouper and axis must be same length错误:
pivot_table的index、columns参数需要传入列名字符串,用来指定从哪一列提取值作为行/列索引- 你直接传入了
df.columns(长度为3)和df.index(长度为5),二者长度不匹配,同时也不符合参数的输入规则,因此触发报错。
解决方案
你的需求本质就是对DataFrame做矩阵转置,直接用pandas内置的转置属性T即可,一行代码就能完成:
df_transposed = df.T
完整示例验证
import pandas as pd # 构造和你结构一致的示例DataFrame df = pd.DataFrame( data=[ ["val1", "val1", "val1"], ["val2", "val2", "val2"], ["val3", "val3", "val3"], ["val4", "val4", "val4"], ["val5", "val5", "val5"], ], index=["idx1", "idx2", "idx3", "idx4", "idx5"], columns=["item1", "item2", "item3"] ) # 执行转置 df_transposed = df.T print(df_transposed)
执行后输出结果完全匹配你需要的结构:
idx1 idx2 idx3 idx4 idx5 item1 val1 val2 val3 val4 val5 item2 val1 val2 val3 val4 val5 item3 val1 val2 val3 val4 val5
补充说明
如果一定要用pivot_table实现也可以,但需要先把宽表转为长表再做透视,属于冗余写法,不推荐:
# 不推荐的冗余写法,仅做原理说明 df_long = df.rename_axis('idx').reset_index().melt(id_vars='idx') df_transposed = df_long.pivot_table( index='variable', columns='idx', values='value', aggfunc='first' )
内容的提问来源于stack exchange,提问作者Zachary McArthur
相关产品推荐
相关产品推荐

