如何将Pandas DataFrame列名中的开赛时间整合为单独列
解决方案
你可以直接用pandas的melt方法完成宽表转长表,把分散在不同时间列的球队数据合并,代码如下:
import pandas as pd # 你原有爬取数据的代码 dfs = pd.read_html("https://www.espn.com/nfl/lines") df = pd.concat(dfs) # 定义不需要转换的固定属性列 fixed_cols = ['REC (ATS)', 'LINE', 'OPEN', 'ML', 'FPI'] # 筛选出所有开赛时间列(列名包含AM/PM) time_cols = [col for col in df.columns if 'AM' in col or 'PM' in col] # 宽表转长表,生成开赛时间、球队名列 res_df = df.melt( id_vars=fixed_cols, value_vars=time_cols, var_name='开赛时间', value_name='球队名称' ) # 过滤掉球队名称为空的无效行,重置索引 res_df = res_df.dropna(subset=['球队名称']).reset_index(drop=True) # 可选:调整列顺序,把开赛时间和球队名称放到最前面 res_df = res_df[['开赛时间', '球队名称'] + fixed_cols]
执行完上述代码后res_df就是你需要的结构,每行对应一支球队,包含所属开赛时间和对应的所有赛事数据。
如果后续需要把同一场比赛的两支球队合并为一行展示,只需按开赛时间分组,奇偶行合并即可。
内容的提问来源于stack exchange,提问作者Pmannn
相关产品推荐
相关产品推荐

