熊猫-使用相应列中的值将数据框的频率从每天更改为每小时

时间:2018-08-05 11:41:48

标签: python pandas resampling

我有一个带有每日值的数据框,这些列对应于一天中每个小时的度量,每小时对应一列。取而代之的是,我想将每天的值重新采样为每小时,并将列的数量减少到仅1。但是,我对如何执行此操作完全感到困惑。

enter image description here

2 个答案:

答案 0 :(得分:0)

假设您要摆脱非小时列,一个解决方案是:

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:]))
))

答案 1 :(得分:0)

下面的代码块创建一个具有两列的新DataFrame:

  • ID:此ID是zone_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'])