首页 > 解决方案 > 将 datetime 日期转换为 bms 列中的月份,而不是用于索引

问题描述

我想从下面的格式更改我的日期列,让它看起来像一个工作月的开始。我不想让它成为一个索引,我想确保它保持为一列。任何帮助都是极好的!

date        id
2000-11-18   A
2000-11-18   B
2000-11-18   C
2000-12-18   A
2000-12-18   B
2001-1-18    C
2001-1-18    A

期望营业月开始

date        id
2000-11-1    A
2000-11-1    B
2000-11-1    C 
2000-12-2    A
2000-12-2    B
2001-1-2     C
2001-1-2     A

标签: pythondataframedatedatetime

解决方案


ADateOffset可用于将时间戳回滚到适当的业务频率。

df['date'] -= pd.offsets.BMonthBegin()

它给:

        date id
0 2000-11-01  A
1 2000-11-01  B
2 2000-11-01  C
3 2000-12-01  A
4 2000-12-01  B
5 2001-01-01  C
6 2001-01-01  A

这与您在评论中提供的代码一致。使用原始数据框,我可以执行以下操作:

>>> df.set_index(pd.DatetimeIndex(df['date'])).resample('BMS').first()
                 date id
date                    
2000-11-01 2000-11-18  A
2000-12-01 2000-12-18  A
2001-01-01 2001-01-18  C

推荐阅读