如何用Pandas处理嵌套字典中元组元素的筛选与排序?
解决方案
方法一:纯Python实现
1. 筛选符合条件的日期
遍历字典,检查每个日期下的元组是否存在第二个元素绝对值大于1的情况:
# 筛选存在元组第二个元素绝对值>1的日期 filtered_dates = [] for date, pos_dict in my_dict.items(): has_large_value = any(abs(tpl[1]) > 1 for tpl in pos_dict.values()) if has_large_value: filtered_dates.append(date) print("符合条件的日期:", filtered_dates) # 输出:符合条件的日期: ['2020_02_04']
2. 生成带最大绝对值的排序列表
先计算每个日期对应的最大绝对值(空日期记为nan),再按值排序:
import math # 计算每个日期的最大绝对值 date_max_abs = {} for date, pos_dict in my_dict.items(): if not pos_dict: date_max_abs[date] = math.nan else: abs_values = [abs(tpl[1]) for tpl in pos_dict.values()] date_max_abs[date] = max(abs_values) # 按值排序:nan排在最前,其余升序排列 sorted_list = sorted(date_max_abs.items(), key=lambda x: (math.isnan(x[1]), x[1])) # 格式化输出(保留两位小数) print("\n排序列表:") for date, val in sorted_list: if not math.isnan(val): print(f"- '{date}': {round(val, 2)}") else: print(f"- '{date}': nan")
输出结果:
排序列表: - '2020_02_06': nan - '2020_02_05': 0.02 - '2020_02_10': 0.03 - '2020_02_04': 339.0
方法二:Pandas实现
先将嵌套字典展开为扁平化DataFrame,再进行聚合和排序:
import pandas as pd # 展开嵌套字典为结构化DataFrame data = [] for date, pos_dict in my_dict.items(): if not pos_dict: data.append({"date": date, "value": pd.NA}) else: for pos, tpl in pos_dict.items(): data.append({"date": date, "value": tpl[1]}) df = pd.DataFrame(data) # 1. 筛选符合条件的日期 filtered_dates = df[df["value"].abs() > 1]["date"].unique().tolist() print("符合条件的日期:", filtered_dates) # 2. 计算每个日期的最大绝对值并排序 date_max_df = df.groupby("date")["value"].apply(lambda x: x.abs().max() if not x.isna().all() else pd.NA) # 排序:空值排在最前,其余按值升序 sorted_df = date_max_df.sort_values(key=lambda x: x.isna()) # 格式化输出 print("\n排序列表:") for date, val in sorted_df.items(): if pd.notna(val): print(f"- '{date}': {round(val, 2)}") else: print(f"- '{date}': nan")
说明
- 纯Python方法无需依赖第三方库,适合轻量场景;
- Pandas方法扩展性更强,适合后续复杂数据操作。
内容的提问来源于stack exchange,提问作者Ranudar
相关产品推荐
相关产品推荐

