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
相关产品推荐
相关产品推荐

