Python中如何将商品购买组合元组列表转为Pandas DataFrame
解法实现
方法1:已有所有二元组总列表时直接创建(最简单)
如果你已经把每行生成的二元组都汇总到了一个总列表中,直接用列表创建DataFrame即可:
import pandas as pd # 示例总列表,对应你生成的所有二元组集合 all_pairs = [('12', '223'), ('54', '554'), ('54', '12'), ('554', '12'), ('12', '1112'), ('12', '11'), ('12', '2353'), ('12', '445'), ('1112', '11'), ('1112', '2353'), ('1112', '445'), ('11', '2353'), ('11', '445'), ('2353', '445'), ('54', '12')] # 直接生成目标格式的DataFrame result_df = pd.DataFrame(all_pairs, columns=['product_one', 'product_two'])
方法2:组合结果存储在原DataFrame列中时处理
如果你是对原DataFrame用apply生成了存储每行组合的列,用explode炸开后拆分即可:
from itertools import combinations # 示例:你已经通过原字段生成了组合列 df['product_list'] = df['product_ids'].apply(lambda x: list(set([i.strip() for i in x.split(',')]))) df['pairs'] = df['product_list'].apply(lambda x: list(combinations(x, 2))) # 炸开组合列,每个二元组单独成一行 exploded_df = df.explode('pairs', ignore_index=True) # 拆分二元组为两列 result_df = pd.DataFrame(exploded_df['pairs'].tolist(), columns=['product_one', 'product_two'])
可选补充逻辑
- 若需要全局去重(不同客户生成的相同配对只留一条),可追加代码:
result_df = result_df.drop_duplicates(ignore_index=True) - 若需要保证两列商品ID大小顺序(比如数值小的在前),可追加代码:
result_df[['product_one', 'product_two']] = result_df[['product_one', 'product_two']].apply(lambda x: sorted(x, key=int), axis=1, result_type='expand')
内容的提问来源于stack exchange,提问作者pybugHTL
相关产品推荐
相关产品推荐

