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

Pandas批量拆分时间区间列并命名的通用方法问询

批量拆分时间区间列的通用解决方案

当然有更高效的批量处理方式啦!你现在的重复代码不仅啰嗦,要是后面新增更多时间区间列(比如31-40、41-50...),还要逐个加代码,太麻烦了。下面给你两种通用的实现方式,任选其一都能搞定:

方式一:用循环批量处理(直观易懂)

这种方式逻辑清晰,新手也能快速理解:

import pandas as pd

# 你的原始数据
df = pd.DataFrame()
df['Team'] = ['A','B','C']
df['0-10'] = ['4-0','2-2','3-2']
df ['11-20']= ['2-1','2-2','3-0']
df ['21-30'] = ['2-1','1-1','2-2']
df ['FH'] = ['5-3','6-6','5-5']
df ['SH'] = ['2-3','3-2','3-3']

# 第一步:筛选出所有需要拆分的时间区间列(排除Team、FH、SH)
time_interval_cols = [col for col in df.columns if col not in ['Team', 'FH', 'SH']]

# 第二步:循环处理每一个时间区间列,拆分后生成新列
for col in time_interval_cols:
    # 拆分"-"并生成两列:原列名+F(第一个值)、原列名+A(第二个值)
    df[[f"{col}F", f"{col}A"]] = df[col].str.split('-', expand=True)

# 可选:如果不需要保留原始的时间区间列,可以删掉它们
df = df.drop(time_interval_cols, axis=1)

print(df)

运行后你会得到预期的结果,新增的0-10F、0-10A、11-20F等列都正确拆分了数值。

方式二:用apply+concat实现(更简洁)

如果你喜欢更简洁的代码,可以用pandas的apply和concat组合来一次性处理所有列:

import pandas as pd

# 原始数据同上,这里省略重复代码

time_interval_cols = [col for col in df.columns if col not in ['Team', 'FH', 'SH']]

# 批量拆分所有时间区间列,展开成新的DataFrame
split_result = df[time_interval_cols].apply(lambda x: x.str.split('-', expand=True))
# 给拆分后的列重命名:原列名+F/A
split_result.columns = [f"{col}{suffix}" for col in time_interval_cols for suffix in ['F', 'A']]

# 合并原始DataFrame(去掉旧的时间区间列)和拆分后的结果
final_df = pd.concat([df.drop(time_interval_cols, axis=1), split_result], axis=1)

print(final_df)

这两种方式都能完美实现你的需求,而且不管后面新增多少个时间区间列,代码都不需要修改,直接就能适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:33:38