如何在Pandas中为各日期的ID号生成重复小时值列
Pandas实现为每个ID匹配重复小时值的方法
问题描述
现有如下结构的DataFrame:
Date ID number 15/06/2022 1523 15/06/2022 1402 需要添加一个
Hour列,让每个ID号对应指定的重复小时值(示例:1、2、4、5、6、7、8),最终得到每个ID与所有指定小时一一对应的DataFrame,如何用Pandas实现?
解决方法
方法1:使用merge的交叉合并(Pandas 1.2.0+)
直接利用how='cross'参数实现两个DataFrame的笛卡尔积,让原数据的每一行与小时列表的每一行组合:
import pandas as pd # 构建原始DataFrame df = pd.DataFrame({ 'Date': ['15/06/2022', '15/06/2022'], 'ID number': [1523, 1402] }) # 定义需要匹配的小时列表 hours_df = pd.DataFrame({'Hour': [1, 2, 4, 5, 6, 7, 8]}) # 交叉合并得到结果 result_df = df.merge(hours_df, how='cross')
方法2:兼容低版本Pandas的临时键合并
如果你的Pandas版本低于1.2.0,可通过添加临时键实现交叉合并:
import pandas as pd df = pd.DataFrame({ 'Date': ['15/06/2022', '15/06/2022'], 'ID number': [1523, 1402] }) hours_df = pd.DataFrame({'Hour': [1, 2, 4, 5, 6, 7, 8]}) # 添加临时键用于合并 df['temp_key'] = 1 hours_df['temp_key'] = 1 # 合并后删除临时键 result_df = df.merge(hours_df, on='temp_key').drop('temp_key', axis=1)
最终效果
处理后得到的DataFrame结构示例:
| Date | ID number | Hour |
|---|---|---|
| 15/06/2022 | 1523 | 1 |
| 15/06/2022 | 1523 | 2 |
| 15/06/2022 | 1523 | 4 |
| ... | ... | ... |
| 15/06/2022 | 1402 | 8 |
内容的提问来源于stack exchange,提问作者Azza
相关产品推荐
相关产品推荐

