Pandas使用相应列中的值将数据帧的频率从每天更改为每小时

2024-04-20 02:31:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含每日值的数据帧,列对应于一天中每小时的测量值,每小时一列。相反,我希望将值从每日重新采样到每小时一次,并将列数减少到仅1列。但是我完全不知道该怎么做。在

enter image description here


Tags: 数据小时将值列数
2条回答

下面的代码块将创建一个包含两列的新数据帧:

  • ID:此ID是区域标识、日期和时间的组合。在
  • 观察:这是属于特定时间(ID)的观察。在

代码:

new_data=[]
for index,row in your_DataFrame.iterrows(): 
    zone_id_date=str(row['zone_id'])+'_'+str(row['date']) 
    for hour in range(1,25): 
        ID=zone_id_date+'_h'+str(hour) 
        observation=row['h'+str(hour)] 
        new_row=[ID,observation] 
        new_data.append(new_row) 

output_data=pandas.DataFrame(data=new_data, columns = ['ID', 'observation'])

假设您想删除非小时列,一个解决方案是:

result = df.set_index('date')\
    .filter(regex='^h')\
    .stack()\
    .to_frame()

# index values are now tuples such as (2018-01-01, 'h1')
result = result.set_index(result.index.map(
    lambda idx: idx[0] + timedelta(hours=int(idx[1][1:]))
))

相关问题 更多 >