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

使用np.where创建列:实现时间单位转天数功能

单位转天数的实现方案

问题分析

你的代码存在三个核心问题:

  1. np.where语法错误:正确格式是np.where(条件, 满足时的值, 不满足时的值),你多套了一层括号,导致语法报错。
  2. 分支覆盖不全:只处理了weeks一种单位,没实现年、月、天的转换规则。
  3. 单复数未统一:单位存在week/weeks、year/years这类单复数差异,需要统一匹配逻辑。

解决方案1:改进多层np.where实现

先统一单位为单数,再通过多层np.where依次判断不同单位的转换规则:

import pandas as pd
import numpy as np

nums = [2, 3, 4, 1, 4, 2, 4, 11, 1, 1]
units = ['days', 'weeks', 'year', 'month', 'days', 'weeks', 'years', 'months', 'day', 'week']

df = pd.DataFrame({'nums': nums, 'units': units})

def convert_days(var1, var2, var3):
    # 用正则去掉单位末尾的s,统一为单数形式
    unit_singular = df[var1].str.replace(r's$', '', regex=True)
    # 多层np.where依次匹配不同单位的转换规则
    df[var3] = np.where(unit_singular == 'week', df[var2] * 7,
                        np.where(unit_singular == 'month', df[var2] * 12,
                                 np.where(unit_singular == 'year', df[var2] * 365,
                                          df[var2])))
    return df

# 调用函数生成结果
result_df = convert_days('units', 'nums', 'test')
print(result_df)

解决方案2:字典映射(更简洁易维护)

定义包含单复数的转换系数字典,直接映射后计算,可读性和扩展性更好:

import pandas as pd

nums = [2, 3, 4, 1, 4, 2, 4, 11, 1, 1]
units = ['days', 'weeks', 'year', 'month', 'days', 'weeks', 'years', 'months', 'day', 'week']

df = pd.DataFrame({'nums': nums, 'units': units})

# 定义所有单位(含单复数)到转换系数的映射
conversion_map = {
    'day': 1, 'days': 1,
    'week': 7, 'weeks': 7,
    'month': 12, 'months': 12,
    'year': 365, 'years': 365
}

# 直接通过映射系数计算天数
df['test'] = df['nums'] * df['units'].map(conversion_map)
print(df)

两种方案对比

  • 多层np.where:适合分支较少的场景,但分支增多后可读性会下降。
  • 字典映射:规则清晰,后续新增或修改单位转换规则时,只需调整字典即可,维护成本更低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:33:22