Python中DataFrame字典两两比对计算成功率差值的实现方法
实现多DataFrame两两比对计算成功率差值方案
实现逻辑
- 先对字典内的所有DataFrame做预处理:统一将
Symbol设为索引,仅保留Successful Rate列并将列名重命名为对应测试名,方便后续合并计算 - 自动生成所有不重复的两两测试组合,避免重复计算正反两组相同的比对
- 对每组比对的两个DataFrame做交集合并,仅保留共有的
Symbol后计算成功率差值 - 最终输出结果字典,键为比对组名称,值为对应结果表
完整代码
import pandas as pd from itertools import combinations # 预处理原始DataFrame字典 processed_dict = {} # 请将下方的df_dict替换为你自己存储DataFrame的字典变量名 for test_name, df in df_dict.items(): # 仅保留需要的列,将Symbol设为索引方便对齐 tmp = df.set_index("Symbol")[["Successful Rate"]] # 重命名列名为测试名,避免合并时列名冲突 tmp = tmp.rename(columns={"Successful Rate": test_name}) processed_dict[test_name] = tmp # 生成所有不重复的两两测试组合 test_list = list(processed_dict.keys()) compare_groups = combinations(test_list, 2) # 存储最终结果 result_dict = {} for test_a, test_b in compare_groups: # 合并两个测试的DataFrame,内连接仅保留共有的Symbol merged_df = pd.merge( processed_dict[test_a], processed_dict[test_b], left_index=True, right_index=True, how="inner" ) # 计算成功率差值,如需调换顺序可交换test_a和test_b的位置 merged_df["Successful Rate Difference"] = merged_df[test_a] - merged_df[test_b] # 重置索引将Symbol变回普通列,仅保留需要的输出字段 result_df = merged_df.reset_index()[["Symbol", "Successful Rate Difference"]] # 存入结果字典 result_dict[f"{test_a} & {test_b}"] = result_df
结果调用示例
你可以直接通过比对组名称调取对应结果,例如要获取test1和test2的比对结果,执行print(result_dict["test1 & test2"])即可。
内容的提问来源于stack exchange,提问作者YUE LYU
相关产品推荐
相关产品推荐

