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

如何在Python DataFrame中分组比较记录并生成相似度得分?

实现DataFrame分组相似度得分计算的最优方法

核心思路

利用Pandas的向量化操作替代逐行/逐组循环,先提取每个master_id对应的基准金额和日期,再通过合并将基准信息关联到每条记录,最后批量计算各项得分。这种方式效率远高于分组遍历,尤其适合大数据量场景。

完整实现步骤

  1. 构造初始数据(已有DataFrame可跳过此步)
import pandas as pd

data = {
    'id': ['a201', 'a101', 'a102', 'b24', 'b13', 'c71', 'c12', 'c1'],
    'amount': [100, 70, 90, 150, 120, 10, 100, 12],
    'date': ['12-10-2022', '12-10-2022', '12-10-2022', '12-10-2022', '12-10-2022', '12-10-2022', '12-10-2022', '12-10-2022'],
    'group': ['a', 'a', 'a', 'b', 'b', 'c', 'c', 'c'],
    'master_id': ['a201', 'a201', 'a201', 'b24', 'b24', 'c71', 'c71', 'c71']
}
df = pd.DataFrame(data)
  1. 转换日期格式
    将字符串日期转为Pandas datetime类型,方便计算日期差:
df['date'] = pd.to_datetime(df['date'], format='%d-%m-%Y')
  1. 提取基准信息
    筛选出id与master_id一致的基准记录,提取其金额和日期并重命名:
master_info = df[df['id'] == df['master_id']][['master_id', 'amount', 'date']].rename(
    columns={'amount': 'master_amount', 'date': 'master_date'}
)
  1. 关联基准信息
    通过master_id将基准信息合并到原DataFrame,让每条记录都能直接获取对应基准数据:
df = df.merge(master_info, on='master_id', how='left')
  1. 计算各项得分
    利用向量化判断批量生成得分:
# 金额得分:与基准金额差绝对值≤10得1,否则0
df['amount_score'] = (abs(df['amount'] - df['master_amount']) <= 10).astype(int)

# 日期得分:与基准日期差绝对值≤5天得1,否则0
df['date_score'] = (abs(df['date'] - df['master_date']).dt.days <= 5).astype(int)

# 总相似度得分
df['similarity_score'] = df['amount_score'] + df['date_score']
  1. 整理输出结果
    移除中间辅助列,保留目标列:
result_df = df.drop(columns=['master_amount', 'master_date'])
print(result_df)

方法优势

  • 效率高:全程使用Pandas向量化操作,避免apply或循环带来的性能损耗,数据量越大优势越明显;
  • 逻辑清晰:步骤拆分明确,便于维护和修改规则;
  • 通用性强:后续调整得分规则时,只需修改对应判断条件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:40:31