Python / Pandas - 将日期和小时列转换为小时索引

时间:2016-05-21 04:08:20

标签: python pandas dataframe

我的数据框看起来像这样:

df
         Date    Hr    CO2_resp
0      5/1/02   600    0.000889
1      5/2/02   600    0.000984
2      5/4/02   900    0.000912

我如何创建一个列Ind来表示自2002年5月1日午夜以来经过的小时数?这样该列将读取

df
         Date    Hr   Ind      CO2_resp
0      5/1/02   600     6      0.000889
1      5/2/02   600    30      0.000984
2      5/4/02   800    80      0.000912

感谢。

2 个答案:

答案 0 :(得分:1)

假设Date是一个字符串,而Hr是一个整数,您可以应用一个函数来解析Date,从{获取小时数(天* 24) {3}}与您的参考日期一起,并添加小时数。

像这样 -

df.apply(lambda x: 
     (datetime.datetime.strptime(x['Date'], '%m/%d/%y')
      - datetime.datetime.strptime('5/1/02', '%m/%d/%y')).days
     * 24 + x['Hr'] / 100,
     axis=1)

答案 1 :(得分:1)

您可以将to_datetimeto_timedelta一起使用。然后按timedeltahours转换为np.timedelta64(1, 'h'),如果输出的type始终为int,则由astype转换为<{1}}:

#convert column Date to datetime
df['Date'] = pd.to_datetime(df.Date)

df['Ind'] = ((df.Date 
              - pd.to_datetime('2002-05-01') 
              + pd.to_timedelta(df.Hr / 100, unit='h')) / np.timedelta64(1, 'h')).astype(int)
print (df)
        Date   Hr  CO2_resp  ind
0 2002-05-01  600  0.000889    6
1 2002-05-02  600  0.000984   30
2 2002-05-04  900  0.000912   81

如果没有除以100Hr,则输出结果不同:

df['Ind'] = ((df.Date 
              - pd.to_datetime('2002-05-01') 
              + pd.to_timedelta(df.Hr,unit='h')) / np.timedelta64(1, 'h')).astype(int)
print (df)
        Date   Hr  CO2_resp  Ind
0 2002-05-01  600  0.000889  600
1 2002-05-02  600  0.000984  624
2 2002-05-04  900  0.000912  972