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

基于Pandas Dataframe单列字符串为新列赋值的问题求助

我来帮你搞定这个Pandas数据处理的问题,咱们一步步来实现你的需求,避免你之前遇到的损坏DataFrame或者生成大量空列的问题:

解决方案步骤

1. 先还原你的原始DataFrame

首先我们把你提供的原始数据转换成可操作的Pandas DataFrame:

import pandas as pd

# 模拟你拉取到的原始数据
data = {
    'language': ['English', 'Spanish', 'Spanish'],
    'open-days': ['24/7', 'Mo-Fr', 'Sa-Su'],
    'open-time': [None, '07:00', '08:00'],
    'close-time': [None, '17:00', '15:00'],
    'dept': ['Sales', 'Sales', 'Sales']
}
df = pd.DataFrame(data)

2. 定义日期映射并初始化新列

先把网页里的日期缩写(比如Mo)和我们要生成的列名前缀(比如mon)做个映射,然后一次性创建所有需要的新列,默认赋值为0——这刚好满足你对24/7行的赋值要求:

# 日期缩写映射:网页显示的缩写 -> 新列名前缀
day_mapping = {
    'Mo': 'mon',
    'Tu': 'tue',
    'We': 'wed',
    'Th': 'thu',
    'Fr': 'fri',
    'Sa': 'sat',
    'Su': 'sun'
}
# 提取所有需要用到的日期前缀
days = list(day_mapping.values())

# 为每一天创建对应的open和closed列,默认值设为0
for day in days:
    df[f'{day}-open'] = 0
    df[f'{day}-closed'] = 0

3. 编写函数填充对应时段的时间

接下来写一个自定义函数,专门处理每一行数据:如果是24/7就保持默认的0;如果是指定日期范围,就把对应的开闭店时间精准填充到该范围的日期列中:

def fill_daily_hours(row):
    # 24/7的行直接返回,已经是0了
    if row['open-days'] == '24/7':
        return row
    
    # 拆分日期范围(比如把Mo-Fr拆成Mo和Fr)
    start_day_abbr, end_day_abbr = row['open-days'].split('-')
    # 转换成列名对应的前缀
    start_day = day_mapping[start_day_abbr]
    end_day = day_mapping[end_day_abbr]
    
    # 获取日期在列表中的索引,确定要填充的日期范围
    start_idx = days.index(start_day)
    end_idx = days.index(end_day)
    
    # 遍历该范围内的所有日期,填充对应的开闭店时间
    for day in days[start_idx:end_idx+1]:
        row[f'{day}-open'] = row['open-time']
        row[f'{day}-closed'] = row['close-time']
    
    return row

# 把函数应用到DataFrame的每一行
df = df.apply(fill_daily_hours, axis=1)

4. 查看最终结果

执行完上面的代码后,你就能得到符合预期的DataFrame了(这里只展示部分列,完整结果会包含一周七天的所有对应列):

language open-days open-time close-time dept mon-open mon-closed tue-open tue-closed ...
0  English      24/7      None       None Sales        0          0        0          0 ...
1  Spanish     Mo-Fr     07:00      17:00 Sales     07:00      17:00    07:00      17:00 ...
2  Spanish     Sa-Su     08:00      15:00 Sales        0          0        0          0 ...

这个方法完美覆盖了你的三个需求:

  • 为一周每一天都添加了对应的open和closed列
  • 24/7的行所有新列都自动赋值为0
  • 指定时段的日期列精准填充了对应的开闭店时间

而且全程都是基于原DataFrame操作,不会生成多余空列,也不会破坏原有数据结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:55:35