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

如何按ID将多观测值数据重塑为所有可能的无序观测值对?

解决方案

可以通过分组后生成无序组合的方式实现需求,核心利用itertools.combinations生成每组内的两两无序配对(该函数生成的组合是不重复的无序对,正好符合(b,d)和(d,b)视为相同的要求),具体步骤如下:

代码实现

import pandas as pd
from itertools import combinations

# 原始数据
df = pd.DataFrame({'id':[1,1,1,2,2], 'letter':['a','b','c','b','d'], 'value':[0,0,0,1,1]})

# 定义分组处理函数
def process_group(group):
    # 生成letter列的所有两两无序组合
    letter_pairs = list(combinations(group['letter'], 2))
    # 同一id的value一致,取第一个即可
    value = group['value'].iloc[0]
    # 构造当前组的结果DataFrame
    return pd.DataFrame({
        'id': [group['id'].iloc[0]] * len(letter_pairs),
        'letter': letter_pairs,
        'value': [value] * len(letter_pairs)
    })

# 按id分组并应用处理函数,最后合并结果
result_df = df.groupby('id').apply(process_group).reset_index(drop=True)

print(result_df)

输出结果

id    letter  value
0   1  (a, b)      0
1   1  (a, c)      0
2   1  (b, c)      0
3   2  (b, d)      1

补充说明

  • 如果不想用元组表示配对,也可以将组合转为字符串(比如'a-b'),只需要修改letter_pairs的生成逻辑:
    letter_pairs = ['-'.join(pair) for pair in combinations(group['letter'], 2)]
    
    这样输出的letter列会是'a-b'这类字符串格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:05:27