如何用Python将DataFrame的item_code值转为列并填充qty数据
解决方案
你可以使用 pandas 的 pivot() 方法快速完成长表到宽表的转换,完全匹配你的需求:
完整可运行代码
import pandas as pd # 初始化数据(修正原代码中的变量名错误) data = { 'date': ['2023-01-01','2023-01-01','2023-01-01','2023-01-02', '2023-01-02'], 'item_code':['HTA-01', 'HTA-02', 'HTB-07', 'HTA-01', 'HTA-02'], 'qty':['16', '29', '1', '18', '34'], } df = pd.DataFrame(data) # 将qty列转换为数值类型(原数据是字符串,转换后缺失值会显示为nan) df['qty'] = pd.to_numeric(df['qty']) # 执行宽表转换 pivoted_df = df.pivot(index='date', columns='item_code', values='qty').reset_index() # 重置列名(让输出格式更整洁) pivoted_df.columns.name = None print(pivoted_df)
代码说明
pivot()方法的核心参数作用:index='date':指定date作为行标识columns='item_code':将item_code的唯一值作为新列名values='qty':用qty列的值填充对应位置
- 转换后不存在的日期-商品组合(比如2023-01-02的HTB-07)会自动填充为
nan - 提前将
qty转为数值类型,确保缺失值显示为标准的数值型nan
运行结果
date HTA-01 HTA-02 HTB-07 0 2023-01-01 16 29 1.0 1 2023-01-02 18 34 NaN
特殊情况处理(存在重复的日期+商品记录)
如果数据中同一日期同一商品有多条记录,改用pivot_table()并指定聚合函数,例如求和:
pivoted_df = df.pivot_table(index='date', columns='item_code', values='qty', aggfunc='sum').reset_index() pivoted_df.columns.name = None
内容的提问来源于stack exchange,提问作者Herza Ryo
相关产品推荐
相关产品推荐

