[英]How to add a column to pandas dataframe based on time from another column
[英]In dataframe add time offset column to another datetime column
我有一個 dataframe 具有以下信息:
Departure Time Offset Dep Arrival Time Offset Arr
0 05:10 +01:00 08:25 +01:00
1 08:05 +01:00 10:10 +01:00
2 11:50 +01:00 12:05 +01:00
3 11:55 +01:00 14:15 +00:00
4 14:55 +02:00 18:40 +01:00
df.dtypes
Departure Time object
Offset Departure object
Arrival Time object
Offset Arrival object
dtype: object
我想為出發時間創建另一列,其中包括出發偏移量作為日期時間格式的偏移量。
我試過這個但沒有成功
df['Departure_Time'] = df['Departure Time'] + df['Offset Departure'].astype('timedelta64')
ValueError: Could not convert object to NumPy timedelta
注意這個鏈接: https://github.com/numpy/numpy/issues/4440 我認為應該首先用 timedelta64 為 Timedelta 定義一個 object 然后使用它。
樣本df
:
Departure Time Offset Dep Arrival Time Offset Arr
0 05:10 +01:00 08:25 +01:00
1 08:05 +01:00 10:10 +01:00
2 11:50 +01:00 12:05 +01:00
3 11:55 +01:00 14:15 +00:00
4 14:55 +02:00 18:40 +01:00
5 13:15 -03:00 20:20 -02:00
您可以首先使用 pd.to_timedelta 將'Offset Dep'
轉換為pd.to_timedelta
,但您需要添加字符串的:ss
部分。:
pd.to_timedelta(df['Offset Dep'].astype(str) + ':00')
然后,您可以將'Departure Time'
轉換為日期時間並添加時間增量:
>>> df['Departure Time'].astype('datetime64') + pd.to_timedelta(df['Offset Dep'].astype(str) + ':00')
0 2020-04-24 06:10:00
1 2020-04-24 09:05:00
2 2020-04-24 12:50:00
3 2020-04-24 12:55:00
4 2020-04-24 16:55:00
5 2020-04-24 10:15:00
dtype: datetime64[ns]
如果您有任何要排除的nan
值,例如:
Departure Time Offset Dep Arrival Time Offset Arr
0 05:10 +01:00 08:25 +01:00
1 08:05 +01:00 10:10 +01:00
2 11:50 +01:00 12:05 +01:00
3 11:55 +01:00 14:15 +00:00
4 14:55 +02:00 18:40 +01:00
5 NaN NaN NaN NaN
6 13:15 -03:00 20:20 -02:00
您可能希望使用掩碼排除NaN
行:
mask = df['Offset Dep'].notna()
df.loc[mask, 'Departure Time'] = (df.loc[mask, 'Departure Time'].astype('datetime64') \
+ pd.to_timedelta(df.loc[mask, 'Offset Dep'].astype(str) + ':00')).dt.strftime('%H:%M')
結果:
Departure Time Offset Dep Arrival Time Offset Arr
0 06:10 +01:00 08:25 +01:00
1 09:05 +01:00 10:10 +01:00
2 12:50 +01:00 12:05 +01:00
3 12:55 +01:00 14:15 +00:00
4 16:55 +02:00 18:40 +01:00
5 NaN NaN NaN NaN
6 10:15 -03:00 20:20 -02:00
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.