Python - 具有多个时区的 pandas 日期时间列

prp*_*prp 5 timezone datetime python-3.x pandas

我有一个包含多个用户和时区的数据框,如下所示:

cols = ['user', 'zone_name', 'utc_datetime']
data = [
    [1, 'Europe/Amsterdam', pd.to_datetime('2019-11-13 11:14:15')],
    [2, 'Europe/London', pd.to_datetime('2019-11-13 11:14:15')],
]

df = pd.DataFrame(data, columns=cols)
Run Code Online (Sandbox Code Playgroud)

基于一篇文章,我应用以下更改来获取用户本地日期时间:

df['local_datetime'] = df.groupby('zone_name')[
    'utc_datetime'
].transform(lambda x: x.dt.tz_localize(x.name))
Run Code Online (Sandbox Code Playgroud)

输出如下:

    user    zone_name     utc_datetime          local_datetime
    1   Europe/Amsterdam  2019-11-13 11:14:15   2019-11-13 11:14:15+01:00
    2   Europe/London     2019-11-13 11:14:15   2019-11-13 11:14:15+00:00
Run Code Online (Sandbox Code Playgroud)

但是,该local_datetime列是一个object,我找不到一种方法将其获取datetime64[ns]为以下格式(所需的输出):

    user    zone_name     utc_datetime          local_datetime
    1   Europe/Amsterdam  2019-11-13 11:14:15   2019-11-13 12:14:15
    2   Europe/London     2019-11-13 11:14:15   2019-11-13 11:14:15
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 3

我认为你需要Series.dt.tz_convertlambda 函数:

df['local_datetime'] = (pd.to_datetime(df.groupby('zone_name')['utc_datetime']
    .transform(lambda x: x.dt.tz_localize('UTC').dt.tz_convert(x.name))
    .astype(str).str[:-6]))

print(df)
   user         zone_name        utc_datetime      local_datetime
0     1  Europe/Amsterdam 2019-11-13 11:14:15 2019-11-13 12:14:15
1     2     Europe/London 2019-11-13 11:14:15 2019-11-13 11:14:15
Run Code Online (Sandbox Code Playgroud)