如何用Pandas将DataFrame与列表合并并复制对应记录
解决方案
你可以通过生成两个数据集的笛卡尔积来实现需求,以下是几种简洁的pandas实现方式:
方法1:使用merge(how='cross')(推荐,pandas 1.2.0+)
这是最直观的方式,直接对原DataFrame和银行列表生成的DataFrame做交叉连接:
import pandas as pd # 原DataFrame df = pd.DataFrame({'Date': ['2022-10-22', '2022-10-21', '2022-10-20']}) # 银行列表转为DataFrame banks_df = pd.DataFrame({'Bank': ['NAB', 'CBA']}) # 交叉合并得到结果 result = df.merge(banks_df, how='cross')
方法2:兼容旧版本pandas(无cross选项)
通过添加临时辅助列实现笛卡尔积:
import pandas as pd df = pd.DataFrame({'Date': ['2022-10-22', '2022-10-21', '2022-10-20']}) # 添加临时key列 df['key'] = 1 banks_df = pd.DataFrame({'Bank': ['NAB', 'CBA'], 'key': 1}) # 合并后删除临时列 result = df.merge(banks_df, on='key').drop('key', axis=1)
方法3:使用assign+explode
通过为每行分配银行列表,再展开实现:
import pandas as pd df = pd.DataFrame({'Date': ['2022-10-22', '2022-10-21', '2022-10-20']}) # 为每个Date分配银行列表,再展开 result = df.assign(Bank=[['NAB', 'CBA']]*len(df)).explode('Bank')
运行任意一种方法后,result都会得到你需要的DataFrame:
Date Bank 0 2022-10-22 NAB 1 2022-10-22 CBA 2 2022-10-21 NAB 3 2022-10-21 CBA 4 2022-10-20 NAB 5 2022-10-20 CBA
内容的提问来源于stack exchange,提问作者Ben Sharkey
相关产品推荐
相关产品推荐

