Search code examples
pythonpandasdatetimepytz

Vectorised Timezone Identifier


I'm trying to create a vectorised implementation of the following function, as currently using pandas apply with my dataframe takes too long, but coming unstuck. Can anyone help?

    """
    Returns GMT if date is between clock changes in winter, and BST if date is between clock changes in summer
    """
    import pytz
    timezone_str = 'Europe/London'
    timezone = pytz.timezone(timezone_str)
    t = timezone.utcoffset(d)
    timezone = 'GMT' if t.seconds==0 else 'BST'
    return timezone

Solution

  • an illustration of my comment; are you looking for strftime's "%Z"?

    import pandas as pd
    
    # a dummy example
    df = pd.DataFrame({"dt": ["2022-01-05", "2022-08-05"]})
    # assuming we have aware datetime
    df["dt"] = pd.to_datetime(df["dt"]).dt.tz_localize("Europe/London")
    
    df["zone"] = df["dt"].dt.strftime("%Z")
    
    print(df)
                             dt zone
    0 2022-01-05 00:00:00+00:00  GMT
    1 2022-08-05 00:00:00+01:00  BST