如何使用Python Pandas DataFrame按订单编号填充对应设备名称
仓库报表自动化:用Pandas按订单编号替换缺失设备名称
输入数据
| Order Ref | EQPT_NAME |
|---|---|
| 10-3423AC | NA |
| 10-3423AC | NA |
| 10-3423AC | PQLR22334 |
| 10-3423AC | NA |
| 10-3410AC | NCRE267 |
| 10-3410AC | NA |
| 10-3410AC | NA |
| 10-3410AC | NA |
期望输出
| Order Ref | EQPT_NAME |
|---|---|
| 10-3423AC | PQLR22334 |
| 10-3423AC | PQLR22334 |
| 10-3423AC | PQLR22334 |
| 10-3423AC | PQLR22334 |
| 10-3410AC | NCRE267 |
| 10-3410AC | NCRE267 |
| 10-3410AC | NCRE267 |
| 10-3410AC | NCRE267 |
解决方案代码
import pandas as pd # 读取报表数据(示例用字典生成,实际项目中用read_excel/read_csv加载文件) data = { 'Order Ref': ['10-3423AC']*4 + ['10-3410AC']*4, 'EQPT_NAME': ['NA', 'NA', 'PQLR22334', 'NA', 'NCRE267', 'NA', 'NA', 'NA'] } df = pd.DataFrame(data) # 将报表中的字符串"NA"转换为Pandas识别的标准缺失值 df['EQPT_NAME'] = df['EQPT_NAME'].replace('NA', pd.NA) # 按订单编号分组,用每组的有效设备名称填充所有缺失项 df['EQPT_NAME'] = df.groupby('Order Ref')['EQPT_NAME'].transform( lambda group: group.fillna(group.dropna().iloc[0]) ) # 输出处理后的结果 print(df)
关键说明
- 核心逻辑:利用
groupby按订单编号聚合,再通过transform保证填充后的数据与原DataFrame的行结构完全匹配,无需额外合并操作。 - 前提假设:每个
Order Ref仅对应唯一的有效EQPT_NAME,若同一订单下存在多个不同非NA值,需先添加去重或数据校验逻辑。
内容的提问来源于stack exchange,提问作者Hari The Flemish
相关产品推荐
相关产品推荐

