如何对pandas DataFrame使用unstack实现指定行列转换效果?
要实现你需要的长表转宽表效果,按以下方式正确使用unstack即可:
核心逻辑
unstack是对DataFrame的多级索引做层级展开,你之前调用失败大概率是没有提前把需要作为行、列维度的字段设置为多级索引。
实现代码
首先构造示例数据(你可以跳过这步直接用你自己的df):
import pandas as pd df = pd.DataFrame({ 'job_Id': [1,2,3,1,2,3], 'Company_Name': ['X','X','X','y','y','y'], 'Min_Salary': [50,12,45,63,75,25] })
方法1:用unstack实现
df_output = df.set_index(['job_Id', 'Company_Name'])['Min_Salary']\ .unstack(level='Company_Name')\ .reset_index()
方法2:用pivot实现(宽表转换更直观的写法)
如果你不想记unstack的索引逻辑,直接用pandas内置的pivot方法做宽表转换更不容易出错:
df_output = df.pivot( index='job_Id', columns='Company_Name', values='Min_Salary' ).reset_index()
如果需要和你给出的示例格式完全对齐,去掉列顶部的Company_Name索引标记,额外加一行代码即可:
df_output.columns.name = None
两种方法调整后得到的df_output都和你给出的预期结果完全一致。
内容的提问来源于stack exchange,提问作者James Lin
相关产品推荐
相关产品推荐

