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

在Pandas DataFrame中按条件计算嵌套字典数据差值并保留指定行

解决方案

步骤说明与代码实现

假设你的DataFrame包含核心列:Exception、Hour、Date、Vendor(取值为jio/nokia)、unique_users、total_sessions;如果存在嵌套字典列(比如名为metrics的列存储{'unique_users': x, 'total_sessions': y}),需先执行展开操作。

  1. 数据预处理与筛选
    先确保日期格式正确,再筛选出符合条件的数据集:
import pandas as pd

# 转换Date列为日期类型(如果原始是字符串格式)
df['Date'] = pd.to_datetime(df['Date']).dt.date

# 筛选目标条件:S1AP异常、小时为2/13、日期为指定两天
filtered_df = df[
    (df['Exception'] == 'S1AP') &
    (df['Hour'].isin([2, 13])) &
    (df['Date'].isin([pd.to_datetime('2023-09-06').date(), pd.to_datetime('2023-09-07').date()]))
].copy()

# 若存在嵌套字典列(如metrics),展开为独立列
# filtered_df[['unique_users', 'total_sessions']] = filtered_df['metrics'].apply(pd.Series)
  1. 计算两天指标差值
    按厂商(Vendor)和小时(Hour)分组,计算最新日期与前一日的指标差值:
# 透视表分组,计算差值
diff_df = filtered_df.pivot_table(
    index=['Vendor', 'Hour'],
    columns='Date',
    values=['unique_users', 'total_sessions']
).diff(axis=1).dropna(axis=1)

# 重命名差值列,便于识别
diff_df.columns = [f'{col[0]}_diff' for col in diff_df.columns]
diff_df = diff_df.reset_index()
  1. 合并差值到最新日期行
    筛选最新日期的行,并将差值列合并进去:
# 提取最新日期(2023-09-07)的记录
latest_records = filtered_df[filtered_df['Date'] == pd.to_datetime('2023-09-07').date()].copy()

# 合并差值列到最新记录
final_df = latest_records.merge(
    diff_df,
    on=['Vendor', 'Hour'],
    how='left'
)
  1. 获取Top2 unique_users记录
    基于最新数据,筛选出unique_users排名前2的行:
top2_unique_users = final_df.nlargest(2, 'unique_users')

最终结果说明

  • final_df 包含最新日期(2023-09-07)的符合条件记录,新增了unique_users_diff和total_sessions_diff两列,分别对应与前一日的差值
  • top2_unique_users 是final_df中unique_users最高的前2条记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:38:09