栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

创建一个Pandas数据框,其中包含跨越日期范围的项目数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

创建一个Pandas数据框,其中包含跨越日期范围的项目数

这是一种实现方法,首先

value_counts
是每个日期列中的 句点
(使用
to_period
Timestamp方法):

In [11]: p = pd.PeriodIndex(freq='m', start='2000-1', periods=18)In [12]: starts = df['LIST_DATE'].apply(lambda t: t.to_period(freq='m')).value_counts()In [13]: ends = df['END_DATE'].apply(lambda t: t.to_period(freq='m')).value_counts()

通过PeriodIndex重新为这些索引编制索引,填写NaN(以便您可以减去),并从累积结束数中选择累积开始数,以使您当前处于活动状态:

In [14]: starts.reindex(p).fillna(0).cumsum() - ends.reindex(p).fillna(0).cumsum()Out[14]: 2000-01    02000-02    02000-03    02000-04    22000-05    22000-06    22000-07    22000-08    22000-09    12000-10    12000-11    12000-12    12001-01    12001-02    12001-03    12001-04    12001-05    12001-06    0Freq: M, dtype: float64

最后一个替代步骤是创建一个Dataframe(最初跟踪更改,因此开始为正,结束为负):

In [21]: current = pd.Dataframe({'starts': starts, 'ends': -ends}, p)In [22]: currentOut[22]:         ends  starts2000-01   NaN     NaN2000-02   NaN     NaN2000-03   NaN     NaN2000-04   NaN       22000-05    -1       12000-06   NaN     NaN2000-07   NaN     NaN2000-08   NaN     NaN2000-09    -1     NaN2000-10   NaN     NaN2000-11   NaN     NaN2000-12   NaN     NaN2001-01   NaN     NaN2001-02   NaN     NaN2001-03   NaN     NaN2001-04   NaN     NaN2001-05   NaN     NaN2001-06    -1     NaNIn [23]: current.fillna(0)Out[23]:         ends  starts2000-01     0       02000-02     0       02000-03     0       02000-04     0       22000-05    -1       12000-06     0       02000-07     0       02000-08     0       02000-09    -1       02000-10     0       02000-11     0       02000-12     0       02001-01     0       02001-02     0       02001-03     0       02001-04     0       02001-05     0       02001-06    -1       0

累计跟踪开始和结束时的运行总计:

In [24]: current.fillna(0).cumsum()Out[24]:         ends  starts2000-01     0       02000-02     0       02000-03     0       02000-04     0       22000-05    -1       32000-06    -1       32000-07    -1       32000-08    -1       32000-09    -2       32000-10    -2       32000-11    -2       32000-12    -2       32001-01    -2       32001-02    -2       32001-03    -2       32001-04    -2       32001-05    -2       32001-06    -3       3

将这些列加在一起,得出当前处于活动状态的列,结果与上面相同:

In [25]: current.fillna(0).cumsum().sum(1)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/625513.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号