Pandas左外连接合并后如何按地址聚合拼接所有发票号为单行
方法1:在现有合并结果基础上分组聚合
你已经生成了合并后的mergedData,直接按Name和Address分组,对InvoiceNum列执行字符串拼接即可:
# 注意如果InvoiceNum是数值类型,先转成字符串避免报错 result = mergedData.groupby(['Name', 'Address'], as_index=False)['InvoiceNum'].agg(lambda x: ', '.join(x.astype(str)))
运行后得到的就是你要的每个地址一行、发票号拼接的结果。
方法2:先聚合发票数据集再合并(更适合大数据量场景)
如果原始数据量较大,先对第二个发票数据集做聚合再合并,能减少合并时的数据量,效率更高:
# 先把发票数据按地址分组,拼接好对应发票号 invoice_agg = invoiceData.groupby('Address', as_index=False)['InvoiceNum'].agg(lambda x: ', '.join(x.astype(str))) # 再和第一个数据集左连接 mergedData = pd.merge(complaintData, invoice_agg, on='Address', how='left')
如果部分地址没有对应发票,拼接列会返回NaN,你可以按需用fillna('')把空值替换成空字符串。
内容的提问来源于stack exchange,提问作者Dieterich Buxtehude
相关产品推荐
相关产品推荐

