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

在Pandas中合并并透视两个数据框,处理逗号分隔字符串列

解决Pandas DataFrame合并、透视及逗号分隔列处理问题

咱们一步步来搞定你这个需求,先补全你给出的代码,再依次处理标签拆分、数据合并和透视操作:

1. 补全数据框定义

你给出的dfB代码没写完,先把它补全:

import pandas as pd 
import numpy as np 

# 定义dfA
tableA = [(100, 'chocolate, sprinkles'), (101, 'chocolate, sprinkles'), (102, 'glazed')] 
labels = ['product', 'tags'] 
dfA = pd.DataFrame.from_records(tableA, columns=labels) 

# 补全dfB的定义
tableB = [('A', 100), ('A', 101), ('B', 101), ('C', 100), ('C', 102), ('B', 101), ('A', 100), ('C', 102)] 
labels = ['customer', 'product'] 
dfB = pd.DataFrame.from_records(tableB, columns=labels)

2. 处理dfA的逗号分隔tags列

dfA里的tags是逗号分隔的字符串,这种格式没法直接和dfB合并后做透视,咱们得把每个标签拆成单独的行:

# 先把tags按逗号+空格拆分,然后展开成多行
dfA_expanded = dfA.assign(tags=dfA['tags'].str.split(', ')).explode('tags')

处理后,每个product对应的每个标签都会单独占一行——比如product 100会生成两行,分别对应chocolate和sprinkles,这样后续合并和透视才能准确关联。

3. 合并两个DataFrame

现在可以用merge方法把处理后的dfA和dfB合并,关联字段是product:

merged_df = pd.merge(dfB, dfA_expanded, on='product', how='left')

这里用how='left'是为了保留dfB里的所有记录,即使某个product在dfA里没有对应标签(你的示例数据里没这种情况,但这么写更通用)。

4. 执行透视操作

假设你想统计每个客户对应每个标签的产品出现次数,可以用pivot_table实现:

pivot_result = merged_df.pivot_table(
    index='customer',
    columns='tags',
    values='product',
    aggfunc='count',
    fill_value=0
)

如果你想更简洁,也可以用pd.crosstab,效果完全一致:

pivot_result = pd.crosstab(merged_df['customer'], merged_df['tags'])

最终结果示例

运行完上面的代码,pivot_result会输出如下格式的表格:

customerchocolateglazedsprinkles
A303
B202
C121

这样就完成了从标签拆分、数据合并到透视表生成的全流程操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:36:01