You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将多值分隔列拆分为单列:DataFrame的melt与groupby问题

问题解决:拆分单列内分号分隔的药物并正确聚合

你的核心问题是用错了数据转换方法——melt是用来将多列(如Med1、Med2这类独立列)转成键值对形式的长表,但你的场景是单列内用分号存储多个药物值,所以应该用str.split+explode来拆分并展开行,而不是melt。

正确处理步骤

假设你的原始DataFrame包含列:Vendor、patientid、Medications(该列存储分号分隔的药物),按以下步骤处理:

  1. 拆分药物列并展开成多行
    先把分号分隔的字符串拆成列表,再将列表的每个元素拆成单独行:

    # 新增Medication列,拆分原药物列;再展开列表为多行
    meds = meds.assign(Medication=meds['Medications'].str.split(';')).explode('Medication')
    
  2. 清理无效值
    去掉空值和可能存在的前后空格:

    meds['Medication'] = meds['Medication'].str.strip()
    meds = meds.loc[meds['Medication'].notna()]
    
  3. 正确执行聚合
    用size()统计分组数量,再重置索引得到清晰的结果:

    meds_final = meds.groupby(['Vendor', 'patientid', 'Medication']).size().reset_index(name='Count')
    

为什么原来的方法出错?

你用melt后生成的variable字段是原DataFrame的列名,这会导致后续groupby时,即使是同一种药物,也会因为来自不同的variable被当成不同分组,最终统计结果不符合预期。而split+explode直接把单列内的多个药物拆成独立行,不会引入多余的variable字段,能保证聚合逻辑正确。

内容的提问来源于stack exchange,提问作者BP12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:45:43