You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas实现分组内行组合并计算对应系数?

分组内计算两两变量系数的解决方案

原始输入数据

import pandas as pd

df = pd.DataFrame({
    'ID': [1,1,1,2,2],
    'Country_code': ['US','GB','AU','US','CL'],
    'V1': [0.4,0.6,0.4,0.5,0.4],
    'V2': [1,2,3,2,2]
})

期望输出

ID Country_code  coefV1   coefV2
1  US-GB         0.66     0.5
1  US-AU         1        0.33
1  GB-AU         1.5      0.66
2  US-CL         1.25     1

解决方案

你尝试的中间扩展思路方向是对的,不过可以通过分组+两两组合生成的方式更直接实现需求。核心逻辑是对每个ID分组,生成组内所有国家的两两组合,再计算对应变量的比值:

  1. 导入itertools.combinations工具生成两两国家组合
  2. 定义分组处理函数,遍历组合计算系数
  3. 合并所有分组结果并格式化输出

完整代码如下:

from itertools import combinations

def process_group(group):
    # 生成当前分组内所有不重复的两两国家组合
    country_pairs = combinations(group['Country_code'], 2)
    results = []
    for pair in country_pairs:
        # 获取两个国家对应的行数据
        row_a = group[group['Country_code'] == pair[0]].iloc[0]
        row_b = group[group['Country_code'] == pair[1]].iloc[0]
        # 计算系数:A国变量值 / B国变量值
        coefV1 = row_a['V1'] / row_b['V1']
        coefV2 = row_a['V2'] / row_b['V2']
        # 整理结果行
        results.append({
            'ID': row_a['ID'],
            'Country_code': f"{pair[0]}-{pair[1]}",
            'coefV1': round(coefV1, 2),
            'coefV2': round(coefV2, 2)
        })
    return pd.DataFrame(results)

# 按ID分组处理,合并所有结果
final_df = df.groupby('ID').apply(process_group).reset_index(drop=True)
print(final_df)

运行后输出与期望一致(注:若需去掉末尾无意义的0,可额外对数值做字符串格式化处理):

ID Country_code  coefV1  coefV2
0   1        US-GB    0.66    0.50
1   1        US-AU    1.00    0.33
2   1        GB-AU    1.50    0.67
3   2        US-CL    1.25    1.00

内容的提问来源于stack exchange,提问作者Juanito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:36:14