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

Python中对不同列组循环应用where生成crosstab的更高效写法

优化实现方案

优化后代码

import pandas as pd
import numpy as np 

df = pd.DataFrame({'a': ['a','b','b','a','b','b','a','b','a'], 
                   'month':['march','march','january', 'march','january','january', 'may','march','march'],
                   'week':['1','1','1', '1','2','3', '3','2','1'],
                   'year':['5','3','4', '3','1','1', '1','1','1']})

# 定义需要替换小于2取值的列
cols_need_replace = ['month', 'week']
# 所有要生成交叉表的列
target_cols = cols_need_replace + ['year']
out = {}

for col in target_cols:
    # 只生成一次交叉表,避免重复计算
    ct = pd.crosstab(df['a'], df[col])
    # 判断是否需要替换值
    if col in cols_need_replace:
        ct = ct.where(ct >= 2, 'group_a')
    out[col] = ct

优化说明

  • 合并了原代码的两次循环、两个中间字典,只需要一次循环就能生成所有结果,减少冗余代码和不必要的内存占用
  • 去掉了无意义的pd.DataFrame()包裹:pd.crosstab返回结果本身就是DataFrame类型,where方法返回的也是同结构的DataFrame,不需要重复转换
  • 后续维护更方便:如果需要新增/删除需要替换值的列,只需要修改cols_need_replace列表即可,不需要调整循环逻辑
  • 最终输出的out字典和你原代码的out3完全一致,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 04:21:03