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

如何简化循环内的If/elif语句?代码用于Excel城市多维度数据统计

当然有办法简化这些if/elif语句啦!我给你分享几个实用的思路,既能让代码更简洁,也更容易维护:

方法一:用字典映射替代条件判断

如果你的用户类型是固定的(subscribers、customers、其他),可以把类型和对应的统计键做一个映射,这样不用写一堆条件分支,代码逻辑更清晰。

假设你原来的循环逻辑大概是这样:

for row in excel_rows:
    city = row['city']
    user_type = row['user_type']
    trip_duration = row['trip_duration']
    
    if user_type == 'subscribers':
        city_stats[city]['subscribers'] += 1
    elif user_type == 'customers':
        city_stats[city]['customers'] += 1
    else:
        city_stats[city]['others'] += 1
    
    # 计算平均时长的代码...

改成字典映射后会清爽很多:

# 先定义用户类型到统计字段的映射
user_type_map = {
    'subscribers': 'subscribers',
    'customers': 'customers'
}

for row in excel_rows:
    city = row['city']
    user_type = row['user_type']
    trip_duration = row['trip_duration']
    
    # 用get方法获取对应字段,默认归类到'others'
    stats_key = user_type_map.get(user_type, 'others')
    city_stats[city][stats_key] += 1
    
    # 平均时长的计算逻辑...

以后如果要新增用户类型,只需要在user_type_map里加一组键值对就行,不用修改循环内部的代码,维护起来超方便!

方法二:用Pandas分组统计(强烈推荐!)

既然是处理Excel数据,直接用Pandas绝对是最优解——完全抛弃手动循环和条件判断,几行代码就能搞定所有统计需求,效率还高得多。

示例代码如下:

import pandas as pd

# 读取Excel文件
df = pd.read_excel('your_excel_file.xlsx')

# 按城市分组,一次性统计所有指标
city_stats = df.groupby('city').agg(
    subscribers=('user_type', lambda x: (x == 'subscribers').sum()),
    customers=('user_type', lambda x: (x == 'customers').sum()),
    others=('user_type', lambda x: (~x.isin(['subscribers', 'customers'])).sum()),
    avg_trip_duration=('trip_duration', 'mean')
).reset_index()

# 查看结果
print(city_stats)

这种方法不仅代码量骤减,而且Pandas的分组运算经过优化,处理大数据量时比手动循环快N倍,还能直接把结果导出为Excel或者其他格式,一步到位。

方法三:用defaultdict简化初始化(适合坚持手动循环的场景)

如果因为某些原因必须用手动循环,那可以用collections.defaultdict来自动初始化每个城市的统计数据,避免提前手动判断城市是否存在,让代码更简洁。

示例:

from collections import defaultdict

# 初始化统计结构,每个城市默认拥有初始值
city_stats = defaultdict(lambda: {
    'subscribers': 0,
    'customers': 0,
    'others': 0,
    'total_duration': 0,
    'trip_count': 0
})

# 结合方法一的字典映射
user_type_map = {
    'subscribers': 'subscribers',
    'customers': 'customers'
}

for row in excel_rows:
    city = row['city']
    user_type = row['user_type']
    trip_duration = row['trip_duration']
    
    stats_key = user_type_map.get(user_type, 'others')
    city_stats[city][stats_key] += 1
    
    # 累计时长和行程数
    city_stats[city]['total_duration'] += trip_duration
    city_stats[city]['trip_count'] += 1

# 最后计算每个城市的平均时长
for city in city_stats:
    if city_stats[city]['trip_count'] > 0:
        city_stats[city]['avg_trip_duration'] = city_stats[city]['total_duration'] / city_stats[city]['trip_count']
    else:
        city_stats[city]['avg_trip_duration'] = 0

这样不用提前为每个城市创建统计项,代码逻辑更流畅。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:25:56