将多值分隔列拆分为单列:DataFrame的melt与groupby问题
问题解决:拆分单列内分号分隔的药物并正确聚合
你的核心问题是用错了数据转换方法——melt是用来将多列(如Med1、Med2这类独立列)转成键值对形式的长表,但你的场景是单列内用分号存储多个药物值,所以应该用str.split+explode来拆分并展开行,而不是melt。
正确处理步骤
假设你的原始DataFrame包含列:Vendor、patientid、Medications(该列存储分号分隔的药物),按以下步骤处理:
拆分药物列并展开成多行
先把分号分隔的字符串拆成列表,再将列表的每个元素拆成单独行:# 新增Medication列,拆分原药物列;再展开列表为多行 meds = meds.assign(Medication=meds['Medications'].str.split(';')).explode('Medication')清理无效值
去掉空值和可能存在的前后空格:meds['Medication'] = meds['Medication'].str.strip() meds = meds.loc[meds['Medication'].notna()]正确执行聚合
用size()统计分组数量,再重置索引得到清晰的结果:meds_final = meds.groupby(['Vendor', 'patientid', 'Medication']).size().reset_index(name='Count')
为什么原来的方法出错?
你用melt后生成的variable字段是原DataFrame的列名,这会导致后续groupby时,即使是同一种药物,也会因为来自不同的variable被当成不同分组,最终统计结果不符合预期。而split+explode直接把单列内的多个药物拆成独立行,不会引入多余的variable字段,能保证聚合逻辑正确。
内容的提问来源于stack exchange,提问作者BP12
相关产品推荐
相关产品推荐

