寻找 Pandas.DateTimeIndex.is_dst()

Dav*_*rth 4 python pandas

我有一个带有 DateTimeIndex 的 DateFrame,即

import pandas as pd
dates = pd.date_range('2018-04-01', periods=96, freq='15T', tz='Australia/Sydney', name='timestamp')
df = dates.to_frame(index=False)
df.set_index(dates.name, inplace=True)
Run Code Online (Sandbox Code Playgroud)

我想创建一个带有 0/1 指标列的列,夏季为 1,冬季为 0,但我找不到相关的 dst / is_dst 属性,即我想要类似的东西

df['is_dst'] = df.index.is_dst()
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议正确的方法/属性是。或者我是否需要转换到不同的“日期时间”课程?

我需要一些通用的东西——即适用于任何时区,包括没有夏令时的“澳大利亚/布里斯班”。我宁愿不必解析时区偏移量并尝试确定它是夏季/冬季。

WeN*_*Ben 6

它在 pandas

df.index.map(lambda x : x.dst())
Run Code Online (Sandbox Code Playgroud)

一个小的改变后可以产生布尔值

df.index.map(lambda x : int(x.dst().total_seconds()!=0))
Out[104]: 
Int64Index([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0],
           dtype='int64', name='timestamp')
Run Code Online (Sandbox Code Playgroud)

  • 我真的必须在这里使用“lambda”映射吗?难道不应该有一个类似于“df['datetime'].dt.is_dst”的更简单的选择吗? (3认同)