我的数据框看起来像这样:
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
感谢。
答案 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_datetime
与to_timedelta
一起使用。然后按timedelta
将hours
转换为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
如果没有除以100
列Hr
,则输出结果不同:
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