2016-05-21 4 views
1

のインデックスに日と時間列を変換:パイソン/パンダ - 私はこのようになりますデータフレームを持っている時間

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を作成するに行きますか5/1/02深夜から経過していますか?そのような列を読むだろう

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

あなたはそれをロードしていますテキストファイルから?時間は通常、前にゼロがありますか? '0600'? –

+0

@JoranBeasleyはい。時間は通常0ではありません。 – potpie

答えて

1

あなたはto_timedeltato_datetimeを使用することができます。その後、出力のtypeastypeによってキャスト、常にintであればnp.timedelta64(1, 'h')と最後でhourstimedeltaを変換:

#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 
+0

ええ、私にとっては、なぜ、「Hr」を「100」で除算する必要があるのか​​はわかりません。 – jezrael

+0

私の場合、午前0時に実験開始から何時間も知る必要があるので、 01/12。ご協力いただきありがとうございます! – potpie

1

Dateが文字列であると仮定すると、とHrが整数である、あなたは、時間(日数* 24)あなたの基準日とtimedeltaから取得し、Dateを解析する機能を適用して、時間を追加することができます。このような

何か -

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) 
関連する問題