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

如何在同类别同日期分组内自连接DataFrame并生成去重配对

实现同一DataFrame内同类别同日期的无重复行配对

思路说明

要完成同Category和date下的行配对且避免重复,核心是通过**自连接(内连接)**加双重过滤条件:

  1. 连接双方的Category和date完全匹配
  2. 用product_nr的大小关系(如a.product_nr < b.product_nr)剔除重复配对(避免A-B和B-A同时出现)

代码实现

1. 导入模块并创建模拟数据

import pandas as pd
from pandas import Timestamp

# 生成模拟数据集
df = pd.DataFrame({
    'date': {0: Timestamp('2021-08-01'),
             1: Timestamp('2022-08-01'),
             2: Timestamp('2021-08-02'),
             3: Timestamp('2021-08-01'),
             4: Timestamp('2022-08-01'),
             5: Timestamp('2022-08-01'),
             6: Timestamp('2022-08-01')},
    'product_nr': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7},
    'Category': {0: 'Cars', 1: 'Cars', 2: 'Cats', 3: 'Dogs', 4: 'Dogs', 5: 'Cats', 6: 'Cats'},
    'price': {0: '34', 1: '24', 2: '244', 3: '284', 4: '274', 5: '354', 6: '250'}
})

2. 执行自连接并过滤重复配对

# 自连接,匹配同Category和同date的行
merged = df.merge(
    df,
    on=['Category', 'date'],
    suffixes=('', '_comp')  # 为被比较的列添加后缀区分
)

# 过滤重复配对,只保留product_nr更小的一侧作为基准行
filtered = merged[merged['product_nr'] < merged['product_nr_comp']]

# 整理为期望的输出格式
result = filtered[[
    'product_nr', 'Category', 'price', 'product_nr_comp'
]].rename(columns={'product_nr_comp': 'product_to_be_compared'})

print(result)

3. 结果说明

运行后得到的结果仅包含符合严格条件的配对:

product_nr Category price  product_to_be_compared
6           6     Cats   354                       7

这是因为模拟数据中只有Cats类别下2022-08-01的两个产品(6和7)满足同类别同日期的配对要求。

适配你给出的期望输出(同类别不限制日期)

如果你的期望输出是基于仅匹配同Category、不限制date的需求,只需修改连接条件,去掉date的匹配逻辑:

# 自连接,仅匹配同Category的行
merged = df.merge(
    df,
    on=['Category'],
    suffixes=('', '_comp')
)

filtered = merged[merged['product_nr'] < merged['product_nr_comp']]

result = filtered[[
    'product_nr', 'Category', 'price', 'product_nr_comp'
]].rename(columns={'product_nr_comp': 'product_to_be_compared'})

print(result)

运行后输出与你给出的期望结构一致(行顺序可能略有不同):

product_nr Category price  product_to_be_compared
0           1     Cars    34                       2
4           3     Cats   244                       6
5           3     Cats   244                       7
6           6     Cats   354                       7
8           4     Dogs   284                       5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:40:28