在Pandas DataFrame中按条件计算嵌套字典数据差值并保留指定行
解决方案
步骤说明与代码实现
假设你的DataFrame包含核心列:Exception、Hour、Date、Vendor(取值为jio/nokia)、unique_users、total_sessions;如果存在嵌套字典列(比如名为metrics的列存储{'unique_users': x, 'total_sessions': y}),需先执行展开操作。
- 数据预处理与筛选
先确保日期格式正确,再筛选出符合条件的数据集:
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)
- 计算两天指标差值
按厂商(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()
- 合并差值到最新日期行
筛选最新日期的行,并将差值列合并进去:
# 提取最新日期(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' )
- 获取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
相关产品推荐
相关产品推荐

