【发布时间】:2020-08-03 10:23:18
【问题描述】:
我有一个数据框,其中hour 列包含UTC 日期时间数据。我有一个time_zone 列,其中包含每个观察的时区,我使用它将hour 转换为本地时间并将其保存在一个名为local_hour 的新列中。为此,我使用以下代码:
import pandas as pd
# Sample dataframe
import pandas as pd
df = pd.DataFrame({
'hour': ['2019-01-01 05:00:00', '2019-01-01 07:00:00', '2019-01-01 08:00:00'],
'time_zone': ['US/Eastern', 'US/Central', 'US/Mountain']
})
# Ensure hour is in datetime format and localized to UTC
df['hour'] = pd.to_datetime(df['hour']).dt.tz_localize('UTC')
# Add local_hour column with hour in local time
df['local_hour'] = df.apply(lambda row: row['hour'].tz_convert(row['time_zone']), axis=1)
df
hour time_zone local_hour
0 2019-01-01 05:00:00+00:00 US/Eastern 2019-01-01 00:00:00-05:00
1 2019-01-01 07:00:00+00:00 US/Central 2019-01-01 01:00:00-06:00
2 2019-01-01 08:00:00+00:00 US/Mountain 2019-01-01 01:00:00-07:00
代码有效。但是使用apply 运行速度很慢,因为实际上我有一个很大的数据框。有没有办法对此进行矢量化或以其他方式加快速度?
注意:我尝试过使用 swifter 包,但在我的情况下它并没有加快速度。
【问题讨论】:
-
你试过了吗?:
df['local_hour'] = df['row'].tz_convert(df['time_zone']) -
添加了一些示例数据。是的,我尝试了该解决方案,但它不起作用。见:stackoverflow.com/questions/57810307/…
标签: python pandas vectorization apply