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

Pandas分组聚合统计后筛选并生成指定结构字典的实现问题

实现代码

Part1 分组统计与筛选

# 新增辅助列简化聚合逻辑
df['is_green'] = df['color'] == 'Green'
df['is_purple'] = df['color'] == 'Purple'
df['green_temp'] = df['temp'].where(df['is_green'])
df['purple_temp'] = df['temp'].where(df['is_purple'])

# 按指定维度分组,计算所有要求字段
group_res = df.groupby(['city', 'gender', 'temp_range'], as_index=False).agg(
    Green_count = ('is_green', 'sum'),
    Purple_count = ('is_purple', 'sum'),
    Green_sum = ('green_temp', 'sum'),
    Purple_sum = ('purple_temp', 'sum'),
    Green_max = ('green_temp', 'max'),
    Purple_max = ('purple_temp', 'max')
)

# 计算Green占比,处理除零异常
group_res['total'] = group_res['Green_count'] + group_res['Purple_count']
group_res['Green_pct'] = group_res['Green_count'] / group_res['total'].replace(0, np.nan)
group_res['Green_pct'] = group_res['Green_pct'].fillna(0)

# 筛选符合Green_pct>0.5的记录
filtered_df = group_res[group_res['Green_pct'] > 0.5].reset_index(drop=True)

Part2 转换为指定格式字典

temp_dict = {}
for (city, gender), g_df in filtered_df.groupby(['city', 'gender']):
    # 提取所有区间的左右端点,去重排序后转为元组
    points = pd.concat([g_df['temp_range'].apply(lambda x: x.left), 
                        g_df['temp_range'].apply(lambda x: x.right)]).drop_duplicates().sort_values()
    temp_dict[(city, gender)] = tuple(points)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:18:03