基于Pandas计算两个DataFrame匹配列的相对百分比
解决方案:基于C列匹配计算相对百分比
嘿,这个需求用Pandas就能轻松搞定,我给你分步骤说明,还附上可直接运行的代码:
步骤1:合并两个DataFrame
首先我们需要把两个DataFrame按照C列进行匹配,这样就能把DataFrame1中对应行的目标列(你需求里提到的D列,或者示例里的B列)带到DataFrame2里,方便后续计算。
步骤2:计算相对百分比
根据你的公式 (DataFrame2目标列值 * 100) / DataFrame1对应列值,我们可以直接在合并后的DataFrame上做列运算,最后保留两位小数和示例结果一致。
完整代码(两种场景)
我注意到你给出的示例公式和需求描述有一点小差异:示例里是用DataFrame2的G/Z列除以DataFrame1的B列,但需求描述里说的是D列。我把两种场景的代码都写出来,你可以按需选择:
场景1:按照需求描述,除以DataFrame1的D列
import pandas as pd # 初始化你的两个DataFrame df1 = pd.DataFrame({ 'A': [1.0, 3.0], 'B': [49.453125, 48.770833], 'C': [2.0, 4.0], 'D': [67.767857, 43.583333] }) df2 = pd.DataFrame({ 'A': [1.0, 1.0], 'E': [807, 909], 'F': [1.0, 2.0], 'G': [34.375000, 1.750000], 'C': [2.0, 2.0], 'H': [808, 910], 'X': [1.0, 2.0], 'Z': [35.375000, 48.750000] }) # 基于C列合并,只保留df1里的C和D列 merged_df = pd.merge(df2, df1[['C', 'D']], on='C', how='left') # 计算G、Z列相对于D列的百分比,保留两位小数 merged_df['G_vs_D_percent'] = (merged_df['G'] * 100 / merged_df['D']).round(2) merged_df['Z_vs_D_percent'] = (merged_df['Z'] * 100 / merged_df['D']).round(2) # 查看结果 print("基于D列的计算结果:") print(merged_df[['C', 'G', 'Z', 'D', 'G_vs_D_percent', 'Z_vs_D_percent']])
运行后输出:
基于D列的计算结果: C G Z D G_vs_D_percent Z_vs_D_percent 0 2.0 34.375 35.375 67.767857 50.73 52.20 1 2.0 1.750 48.750 67.767857 2.58 71.94
场景2:按照示例公式,除以DataFrame1的B列
如果你的实际需求是和示例一致,除以B列的话,只需要修改合并的列和计算逻辑:
# 基于C列合并,只保留df1里的C和B列 merged_df = pd.merge(df2, df1[['C', 'B']], on='C', how='left') # 计算G、Z列相对于B列的百分比,保留两位小数 merged_df['G_vs_B_percent'] = (merged_df['G'] * 100 / merged_df['B']).round(2) merged_df['Z_vs_B_percent'] = (merged_df['Z'] * 100 / merged_df['B']).round(2) # 查看结果 print("基于B列的计算结果:") print(merged_df[['C', 'G', 'Z', 'B', 'G_vs_B_percent', 'Z_vs_B_percent']])
运行后输出:
基于B列的计算结果: C G Z B G_vs_B_percent Z_vs_B_percent 0 2.0 34.375 35.375 49.453125 69.51 71.53 1 2.0 1.750 48.750 49.453125 3.54 98.58
内容的提问来源于stack exchange,提问作者honeymoon
相关产品推荐
相关产品推荐

