pandas 创建一个新的数据框列,该列指示日期列表中的期间(月)

woobm2wo  于 2023-03-28  发布在  其他
关注(0)|答案(1)|浏览(68)

我有一个pandas dataframe,其中包含一列日期,表示论坛帖子的发布时间['post_month],范围从2017年11月到2023年1月。我想从这些创建一个新的'period'列,表示帖子发布的时间段。因此,2017年11月发布的帖子将是period(或月份)= 1,2017年12月期间(或月份)= 2,2018年1月,期间(或月份)= 3等等......直到2023年1月的最后一个期间。
最合适的方法是什么?
我的数据如下所示:
| 年龄|二进制目标|后月|同群|
| --------------|--------------|--------------|--------------|
| 六十三|0|2018年4月1日|二○一九年|
| 三十四|0|2019年2月1日|二○一九年|
| 四十四|1|2018-09-01 2018-09-01|2017年|
| 二十七|0|2018-03-01 2018-03-01|2022|

pgvzfuti

pgvzfuti1#

您可以转换to_period,减去您的引用并获得周期数:

df['period'] = (pd.to_datetime(df['post_month'])
                  .dt.to_period('M')
                  .sub(pd.Period('2017-10', freq='M'))
                  .apply(lambda x: x.n)
               )
  • 注:由于您想从1开始计算,我们将参考日期定为2017年10月。*

替代矢量解决方案:

date = pd.to_datetime(df['post_month'])
ref = pd.Timestamp('2017-10-01')
df['period'] = date.dt.year.sub(ref.year).mul(12).add(date.dt.month.sub(ref.month))

输出:

age  binary_target  post_month  cohort  period
0   63              0  2018-04-01    2019       6
1   34              0  2019-02-01    2019      16
2   44              1  2018-09-01    2017      11
3   27              0  2018-03-01    2022       5

相关问题