如何匹配参考DataFrame的Serial ID与11个DataFrame的Serial Number并生成新表
多DataFrame与参考DataFrame匹配的解决方案
原代码的问题
- 循环内每次赋值都会覆盖
df_matches,最终仅保留最后一个匹配的结果,丢失之前的匹配数据 - 仅处理了
df1,未覆盖另外10个需要匹配的DataFrame
正确实现步骤
- 统一管理待匹配DataFrame:将11个需要匹配的DataFrame放入一个列表,便于批量处理
- 提取参考ID集合:从参考DataFrame中获取所有需要匹配的
Serial ID值 - 批量筛选并合并结果:遍历每个待匹配DataFrame,筛选出符合条件的行,合并到最终结果中
代码示例
import pandas as pd # 将11个待匹配的DataFrame存入列表(根据实际变量名替换) dfs_to_match = [df1, df2, df3, df4, df5, df6, df7, df8, df9, df10, df11] # 提取参考DataFrame中的所有Serial ID reference_serial_ids = reference_df['Serial ID'].tolist() # 初始化空的结果DataFrame df_matches = pd.DataFrame() # 批量处理每个DataFrame for df in dfs_to_match: # 筛选当前DataFrame中Serial Number属于参考ID的行 matched_rows = df[df['Serial number'].isin(reference_serial_ids)] # 合并到结果中,ignore_index避免索引重复 df_matches = pd.concat([df_matches, matched_rows], ignore_index=True) # 查看最终匹配结果 print(df_matches)
可选优化:添加来源标记
如果需要区分匹配行来自哪个原DataFrame,可以在循环中增加来源标记列:
for idx, df in enumerate(dfs_to_match, 1): matched_rows = df[df['Serial number'].isin(reference_serial_ids)] # 添加列标记当前行来自第几个DataFrame matched_rows['source_dataframe'] = f'dataset_{idx}' df_matches = pd.concat([df_matches, matched_rows], ignore_index=True)
内容的提问来源于stack exchange,提问作者0binary Name1
相关产品推荐
相关产品推荐

