编写Python函数从含DataFrame的字典列表中查询指定市场年份的最大指标值
实现方案
首先你需要把所有同类市场数据字典统一存储在当前类的实例属性中,示例中我们用self.market_datasets存储所有R_1、R_2这类结构的字典。函数实现如下:
import pandas as pd import numpy as np class MarketDataAnalyzer: def __init__(self, all_market_data: list): # 初始化时传入所有市场数据字典组成的列表 self.market_datasets = all_market_data def get_results_max(self, market: str, metric: str, year: int) -> dict: # 1. 匹配对应市场的数据集 target_dataset = None for ds in self.market_datasets: if ds['market'] == market: target_dataset = ds break if not target_dataset: raise ValueError(f"未找到名为{market}的市场数据") df = target_dataset['summary'] # 2. 校验指标是否存在 if metric not in df.columns or 'year' not in df.columns: raise ValueError(f"数据中不存在year或指定的指标{metric}") # 3. 过滤目标年份的数据 year_df = df[df['year'] == year].copy() if year_df.empty: raise ValueError(f"{market}市场无{year}年的运营数据") # 4. 找到指标最大值对应的行 max_row = year_df[year_df[metric] == year_df[metric].max()].iloc[0] # 组装返回结果,包含市场名+所有关联字段 result = max_row.to_dict() result['market'] = market return result
调用示例
# 先把所有市场数据放到列表里初始化类 all_data = [R_1, R_2] analyzer = MarketDataAnalyzer(all_data) # 调用方法查询 res = analyzer.get_results_max(market='New York', metric='count', year=2022) print(res)
示例返回结果
{'year': 2022, 'customers': 410, 'count': 185, 'market': 'New York'}
如果同一年份同一个指标存在多条相同最大值的记录,上述代码默认返回第一条,你可以根据需求调整返回逻辑。
内容的提问来源于stack exchange,提问作者makhai
相关产品推荐
相关产品推荐

