【发布时间】:2019-03-09 09:43:44
【问题描述】:
让我们直接进入问题。以下为每日数据:
AAA BBB CCC
date
2012-04-16 44.48 28.48 17.65
2012-04-17 44.59 28.74 17.65
2012-04-18 44.92 28.74 17.72
2012-04-19 44.92 28.62 17.72
2012-04-20 45.09 28.68 17.71
2012-04-23 45.09 28.40 17.76
2012-04-24 45.09 28.51 17.73
2012-04-25 45.01 28.76 17.73
2012-04-26 45.40 28.94 17.76
2012-04-27 45.57 29.02 17.79
2012-04-30 45.45 28.90 17.80
2012-05-01 45.79 29.07 17.80
2012-05-02 45.71 28.98 17.77
2012-05-03 45.44 28.81 17.79
2012-05-04 45.05 28.48 17.79
2012-05-07 45.05 28.48 17.79
2012-05-08 45.00 28.40 17.93
2012-05-09 44.87 28.30 17.94
2012-05-10 44.93 28.34 17.85
2012-05-11 44.86 28.30 17.96
... ... ...
我想从第一行开始选择月增量的行,即索引为2012-04-16, 2012-05-16, 2012的行-06-16,... 。我可以使用 relativedelta 并手动添加它们,但我想知道是否有更有效的方法。我尝试重新采样,但我只能选择每月的第一天或最后一天,如df.resample('M').first()。
使问题更复杂的是缺少某些日期;它们是工作日,但不是美国的工作日。有几种方法可以解决此问题:
选择确切日期或最接近日期的较早日期。如果 这样的日期不存在,然后开始查找以后的日期。
选择确切日期或最接近日期的较晚日期。如果这样 日期不存在,然后开始查找更早的日期。
选择最接近确切日期的日期,无论是否早 或迟到;我可以使用
min(df.index, key=lambda x: abs(x - (df.index[0] + relativedelta(months=1)))。
在每种情况下,我都想知道哪种方法最有效且易于阅读。在最后一个代码示例中,月份是一个变量,所以我不确定是否可以将其作为 lambda 过程并使用“应用”。
提前致谢。
【问题讨论】:
-
可能是this可以帮助你。
-
@pygo 抱歉,这对我没有帮助:(
标签: python pandas date dataframe