基于Header Request匹配,如何追加两个DataFrame生成目标数据集
解决方案
你的需求是将df1中每一行对应的df2同Header Request值的行紧跟其后,而pd.merge会把匹配的行合并为单行,不符合你的预期。下面提供两种可行方法:
方法一:添加临时排序键(高效推荐)
通过给两个DataFrame添加分组标识和排序优先级,合并后按规则排序即可得到目标顺序:
import pandas as pd # 初始化DataFrame df1 = pd.DataFrame([{'GUID': 'login','sent': True,'Header Request': '2671257824','count': 314}, {'GUID': 'login','sent': True,'Header Request': '2700603520','count': 441}]) df2 = pd.DataFrame([{'GUID': 'Res','sent': False,'Header Request': '2671257824','count': 318}, {'GUID': 'Res','sent': False,'Header Request': '2700603520','count': 445}]) # 给df1和df2添加临时分组与排序列 df1['group_id'] = df1['Header Request'] df1['order'] = 1 df2['group_id'] = df2['Header Request'] df2['order'] = 2 # 合并并排序 combined = pd.concat([df1, df2]) df3 = combined.sort_values(by=['group_id', 'order'], ignore_index=True) # 删除临时列 df3 = df3.drop(columns=['group_id', 'order']) print(df3)
输出结果与你期望的df3完全一致。
方法二:遍历拼接(适合小型数据集)
逐行遍历df1,将当前行和df2中匹配的行依次追加到结果中:
import pandas as pd # 初始化DataFrame df1 = pd.DataFrame([{'GUID': 'login','sent': True,'Header Request': '2671257824','count': 314}, {'GUID': 'login','sent': True,'Header Request': '2700603520','count': 441}]) df2 = pd.DataFrame([{'GUID': 'Res','sent': False,'Header Request': '2671257824','count': 318}, {'GUID': 'Res','sent': False,'Header Request': '2700603520','count': 445}]) df3 = pd.DataFrame() for _, row in df1.iterrows(): # 追加df1当前行 df3 = pd.concat([df3, row.to_frame().T], ignore_index=True) # 匹配并追加df2对应行 match_row = df2[df2['Header Request'] == row['Header Request']] if not match_row.empty: df3 = pd.concat([df3, match_row], ignore_index=True) print(df3)
内容的提问来源于stack exchange,提问作者aws naveen
相关产品推荐
相关产品推荐

