使用Python处理Excel中一对多匹配关系

import pandas as pd

df = pd.read_excel(r'C:\Users\wangkejun\Desktop\1.xls')

# 提取一一对应的数据
sku_list = []
channel_list = []

for sku, channel in zip(df['XXX'], df['XXXX']):
    if pd.isna(channel):  # 判断是否为缺失值
        continue  # 是缺失值则跳过该行数据

    if ',' in str(sku):  # 将sku转换为字符串类型
        sku_items = str(sku).split(',')
        channel_items = channel.split(',')

        # 处理长度不一致的情况
        min_len = min(len(sku_items), len(channel_items))
        sku_list.extend(sku_items[:min_len])
        channel_list.extend(channel_items[:min_len])

# 创建新的DataFrame
new_df = pd.DataFrame({
    'XXX': sku_list,
    'XXXX': channel_list
})

new_df.to_excel(r'C:\Users\wangkejun\Desktop\1.xlsx')

原数据 

结果 

  • 使用zip()函数将两列数据进行逐行遍历,sku和channel分别对应每一行的"XXXX"和"XXXX";
  • 判断channel是否为缺失值,如果是则跳过该行数据,不做处理;
  • 如果sku中包含逗号(,),则说明一个发货单中有多个产品,需要将sku和channel分别按照逗号进行拆分;
  • 处理长度不一致的情况,将sku和channel的长度取最小值,只保留相同数量的数据,并将其分别存入sku_list和channel_list中。

相关推荐

  1. MyBatis 自定义映射 ResultMap:映射关系处理

    2023-12-16 03:50:03       7 阅读
  2. Python处理Excel文件并与数据库匹配做拼接

    2023-12-16 03:50:03       31 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-16 03:50:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-16 03:50:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-16 03:50:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-16 03:50:03       20 阅读

热门阅读

  1. 【算法】动态规划(dp问题),持续更新

    2023-12-16 03:50:03       41 阅读
  2. springboot实战之oss上传工具封装

    2023-12-16 03:50:03       36 阅读
  3. 重新格式化字符串

    2023-12-16 03:50:03       39 阅读
  4. 37、池化与卷积的区别

    2023-12-16 03:50:03       32 阅读
  5. 记录 | ubuntu安装Albert

    2023-12-16 03:50:03       31 阅读
  6. 信息收集 - 渗透测试流程

    2023-12-16 03:50:03       34 阅读
  7. react组件注意事项

    2023-12-16 03:50:03       34 阅读
  8. 测试学习笔记1:@SpringbootTest测试注解详解

    2023-12-16 03:50:03       36 阅读
  9. 一个简单的cmake模板(C++)

    2023-12-16 03:50:03       44 阅读
  10. Zabbix监控网站

    2023-12-16 03:50:03       33 阅读