3

作为能够计算两个日期时间之间的活动的后续问题,在这里很好地回答:创建一个包含跨越日期范围的项目计数的 Pandas 数据框

剩下的问题是最后一个月 ['END_DATE'] 在两个表相加和相减后最终显示为零,这在数学上是正确的,因为所有项目的结束日期都在当月或更早,但是在这种情况下,因为他们在那个月至少有一部分是活跃的,将一个月添加到 END_DATE 会更正确,这样他们将在结束月份显示为活跃(H2 是一个数据框)

代码是:

ends = H2['END_DATE'].apply(lambda t: t.to_period(freq='m')).value_counts()

我曾尝试使用前滚和 DateOffset(month=1) 例如。对于日期偏移:

ends = (H2['END_DATE'].DateOffset(months=1)).apply(lambda t: t.to_period(freq='m')).value_counts()

这给了我这个错误:

AttributeError: 'Series' object has no attribute 'DateOffset'
4

1 回答 1

4

最简单的方法是在 PeriodIndex 中添加一个(月):

In [21]: ends
Out[21]:
2000-05    1
2000-09    1
2001-06    1
Freq: M, dtype: int64

In [22]: ends.index = ends.index + 1

In [23]: ends
Out[23]:
2000-06    1
2000-10    1
2001-07    1
Freq: M, dtype: int64

我最初的建议是在您重新编制索引后进行转变(因为无论如何您都将这样做):

In [11]: ends
Out[11]:
2000-05    1
2000-09    1
2001-06    1
Freq: M, dtype: int64

In [12]: p = pd.PeriodIndex(freq='m', start='2000-1', periods=19)  # Note: needs to be one more than before

In [13]: sparse_ends = ends.reindex(p)

In [14]: sparse_ends.shift(1)
Out[14]:
2000-01   NaN
2000-02   NaN
2000-03   NaN
2000-04   NaN
2000-05   NaN
2000-06     1
2000-07   NaN
2000-08   NaN
2000-09   NaN
2000-10     1
2000-11   NaN
2000-12   NaN
2001-01   NaN
2001-02   NaN
2001-03   NaN
2001-04   NaN
2001-05   NaN
2001-06   NaN
2001-07     1
Freq: M, dtype: float64
于 2013-09-21T18:32:39.657 回答