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

如何计算Query_ID在不同Position下Impressions总和的百分比变化?

解决方案

数据样本

import pandas as pd

df_dict = pd.DataFrame({'Query_ID': {692260: 24055,
  887923: 9730,
  10803: 24055,
  885373: 9730,
  675813: 9730,
  238990: 24055,
  930097: 33748,
  796353: 9730,
  296925: 653,
  521574: 24055,
  760389: 653,
  57514: 23674,
  512747: 653,
  681778: 9730,
  143410: 24055,
  824324: 40359,
  653270: 9730,
  820505: 24055,
  178048: 40759,
  390705: 9730},
 'Position': {692260: 7.0,
  887923: 9.5,
  10803: 1.0,
  885373: 9.5,
  675813: 7.0,
  238990: 2.0,
  930097: 10.0,
  796353: 8.571428571428571,
  296925: 3.0,
  521574: 5.0,
  760389: 8.0,
  57514: 1.0,
  512747: 5.0,
  681778: 7.0,
  143410: 1.0,
  824324: 9.0,
  653270: 7.0,
  820505: 9.0,
  178048: 2.0,
  390705: 4.0},
 'Impressions': {692260: 1,
  887923: 2,
  10803: 1,
  885373: 2,
  675813: 1,
  238990: 1,
  930097: 1,
  796353: 21,
  296925: 1,
  521574: 1,
  760389: 1,
  57514: 1,
  512747: 1,
  681778: 2,
  143410: 1,
  824324: 1,
  653270: 6,
  820505: 1,
  178048: 1,
  390705: 1}})

数据示例截图

预处理优化(针对百万级数据)

先对数据进行分组聚合,提前计算每个Query_ID+Position组合的Impressions总和,将结果存入字典实现快速查询,避免每次查询遍历全表:

# 分组计算每个Query_ID在对应Position的总曝光
aggregated_data = df_dict.groupby(['Query_ID', 'Position'])['Impressions'].sum()
# 转换为字典映射,查询时间复杂度O(1)
impression_lookup = aggregated_data.to_dict()

实现目标函数

def calculate_impression_change(query_id, pos1, pos2):
    # 获取两个位置的总曝光量
    sum_pos1 = impression_lookup.get((query_id, pos1), 0)
    sum_pos2 = impression_lookup.get((query_id, pos2), 0)
    
    # 处理边界情况
    if sum_pos1 == 0:
        return "Position_1无曝光数据" if sum_pos2 == 0 else "无法计算(Position_1曝光为0)"
    
    # 计算百分比变化:(Position2总曝光/Position1总曝光 - 1) * 100
    change_percent = ((sum_pos2 / sum_pos1) - 1) * 100
    # 格式化输出为带百分号的整数
    return f"{round(change_percent)}%"

逻辑说明

  1. 聚合预处理:通过groupby一次性完成所有组合的曝光总和计算,后续查询直接从字典取值,大幅提升百万级数据的查询效率
  2. 百分比计算:基于你提供的思路转换为增减百分比(原思路中的x是相对倍数,减去100%得到实际变化率)
  3. 边界处理:覆盖了Position无数据或曝光为0的场景,避免程序报错

示例验证

假设完整数据中Query_ID=9730、Position=7的总曝光为13,Position=4的总曝光为10,调用函数:

calculate_impression_change(9730, 7, 4)

输出:-23%(与你给出的示例匹配)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:18:31