如何用Pandas为DataFrame每行生成0-23小时的新列?
为每个AN_LOG_ID生成0-23小时的多行数据
方法一:交叉合并(cross merge)
通过生成包含0-23小时的辅助DataFrame,与原数据进行交叉合并,直接得到每个ID对应所有小时的结果:
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({'AN_LOG_ID': ['00000001', '00000002', '00000003']}) # 生成0到23的小时序列 hour_df = pd.DataFrame({'HOUR': range(24)}) # 交叉合并,每个AN_LOG_ID匹配所有小时 final_df = df.merge(hour_df, how='cross') # 查看结果 print(final_df)
方法二:assign+explode展开
先为每个AN_LOG_ID行添加一个包含0-23的小时列表,再通过explode将列表拆分为多行:
import pandas as pd df = pd.DataFrame({'AN_LOG_ID': ['00000001', '00000002', '00000003']}) # 为每行添加HOUR列(值为0-23的列表),再展开 final_df = df.assign(HOUR=[list(range(24))]*len(df)).explode('HOUR', ignore_index=True) # 查看结果 print(final_df)
两种方法最终都会输出符合需求的结果:每个AN_LOG_ID对应24行数据,HOUR列依次取0到23的数值。
内容的提问来源于stack exchange,提问作者bearded_link
相关产品推荐
相关产品推荐

