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

如何用Pandas按id分组生成同列值的两两组合DataFrame?

同一ID下文本两两组合的实现方案

方法一:分组结合组合生成器

利用groupby按ID拆分数据,再通过itertools.combinations生成每个分组内的两两不重复组合:

import pandas as pd
from itertools import combinations

# 原始数据
df = pd.DataFrame({
    'id': [1, 1, 1, 2, 2],
    'txt': ['A1', 'A2', 'A3', 'A4', 'A5']
})

def process_group(group):
    # 生成txt列的两两组合
    combos = combinations(group['txt'], 2)
    # 转换为DataFrame并绑定当前ID
    return pd.DataFrame(combos, columns=['txt', 'txt2']).assign(id=group['id'].iloc[0])

# 分组处理后合并结果
result = df.groupby('id').apply(process_group).reset_index(drop=True)

执行后得到的result即为期望的DataFrame:

id txt txt2
0   1  A1   A2
1   1  A1   A3
2   1  A2   A3
3   2  A4   A5

方法二:自连接加过滤

通过同表自连接实现分组内的笛卡尔积,再过滤掉重复组合:

import pandas as pd

df = pd.DataFrame({
    'id': [1, 1, 1, 2, 2],
    'txt': ['A1', 'A2', 'A3', 'A4', 'A5']
})

# 按ID自连接,生成所有可能的配对
merged_df = df.merge(df, on='id', suffixes=('', '2'))
# 过滤掉重复组合(保留txt < txt2的情况,避免A2&A1这类重复项)
result = merged_df[merged_df['txt'] < merged_df['txt2']].reset_index(drop=True)

这个方法无需额外导入库,仅用Pandas原生操作即可实现需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:01:18