【发布时间】:2021-02-14 23:08:46
【问题描述】:
我有一个带有 datetimeindex 和 Val 列的数据框。该值每天都在变化。
我想创建一个新列,该列将是该月最早一天的 Val 值。请注意,我没有说每月的“第一天”。索引中最早的一天可能是第 2 天、第 3 天、第 10 天等……那么这个值应该传播到下个月的最早一天。
在下面的示例中,对于 2020 年 1 月 2 日,我想要 1.764052,并且要持续到 2020 年 1 月 31 日。然后对于 2020-02-03,我想要 0.864436,这将持续到 3 月出现的第一个日期。
如果我们做不到那么远,即使是一个布尔掩码,只要告诉索引日期是否是本月最早的就足够了,我可以以某种方式对值列进行排序。提前致谢。
import numpy as np
import pandas as pd
np.random.seed(0)
rng = pd.date_range('2020-01-02', periods=27, freq='B')
df = pd.DataFrame({ 'Val' : np.random.randn(len(rng)) }, index=rng)
df['Want'] = 99
df
Val Want
2020-01-02 1.764052 1.764052
2020-01-03 0.400157 1.764052
2020-01-06 0.978738 1.764052
2020-01-07 2.240893 1.764052
2020-01-08 1.867558 1.764052
2020-01-09 -0.977278 1.764052
2020-01-10 0.950088 1.764052
2020-01-13 -0.151357 1.764052
2020-01-14 -0.103219 1.764052
2020-01-15 0.410599 1.764052
2020-01-16 0.144044 1.764052
2020-01-17 1.454274 1.764052
2020-01-20 0.761038 1.764052
2020-01-21 0.121675 1.764052
2020-01-22 0.443863 1.764052
2020-01-23 0.333674 1.764052
2020-01-24 1.494079 1.764052
2020-01-27 -0.205158 1.764052
2020-01-28 0.313068 1.764052
2020-01-29 -0.854096 1.764052
2020-01-30 -2.552990 1.764052
2020-01-31 0.653619 1.764052
2020-02-03 0.864436 0.864436
2020-02-04 -0.742165 0.864436
2020-02-05 2.269755 0.864436
2020-02-06 -1.454366 0.864436
2020-02-07 0.045759 0.864436
【问题讨论】:
标签: python pandas dataframe datetime