我有一个pandas Series(),其日常条目都设置为False:
d = pd.Series(False, pd.bdate_range("20100101", periods=100, freq="D"))
我现在想要将每个月的第15和第20之间的值设置为True。我生成一个系列,其索引是开始/结束日期和值True:
s = pd.Series(True, pd.bdate_range("20100101", periods=100, freq="MS") + pd.DateOffset(14))
e = pd.Series(True, pd.bdate_range("20100101", periods=100, freq="MS") + pd.DateOffset(19))
此时s
和e
将包含 s tart和 e nd日期,在此日期之间我要设置{ {1}}为真。我不确定如何优雅地将其应用于d
。
这个问题的一个复杂因素是s和e是随机的(即它并不总是一个月的15-20天):
d
答案 0 :(得分:2)
您可以使用between
,但首先需要使用DatetimeIndex.day
创建Serie
:
print (pd.Series(d.index.day, index=d.index).between(15,20))
2010-01-01 False
2010-01-02 False
2010-01-03 False
2010-01-04 False
2010-01-05 False
2010-01-06 False
2010-01-07 False
2010-01-08 False
2010-01-09 False
2010-01-10 False
2010-01-11 False
2010-01-12 False
2010-01-13 False
2010-01-14 False
2010-01-15 True
2010-01-16 True
2010-01-17 True
2010-01-18 True
2010-01-19 True
2010-01-20 True
2010-01-21 False
2010-01-22 False
2010-01-23 False
2010-01-24 False
2010-01-25 False
2010-01-26 False
2010-01-27 False
2010-01-28 False
2010-01-29 False
2010-01-30 False
2010-03-12 False
2010-03-13 False
2010-03-14 False
2010-03-15 True
2010-03-16 True
2010-03-17 True
2010-03-18 True
2010-03-19 True
2010-03-20 True
2010-03-21 False
2010-03-22 False
2010-03-23 False
2010-03-24 False
2010-03-25 False
2010-03-26 False
2010-03-27 False
2010-03-28 False
2010-03-29 False
2010-03-30 False
2010-03-31 False
2010-04-01 False
2010-04-02 False
2010-04-03 False
2010-04-04 False
2010-04-05 False
2010-04-06 False
2010-04-07 False
2010-04-08 False
2010-04-09 False
2010-04-10 False
Freq: D, dtype: bool
答案 1 :(得分:2)
使用现有的pd.Series
,您可以通过.day
的{{1}}属性使用boolean indexing
,或使用DateTimeIndex
达到同样的效果:
np.in1d
导致:
d[(d.index.day >= 15) & (d.index.day <= 20)] = True
d[np.in1d(d.index.day, np.arange(15, 20))] = True