date-offsets.MonthBegin(1)返回上个月,如果日期是该月的第一天

问题描述 投票:0回答:1

我正在尝试为熊猫数据框创建月份列。将“ 10/21/19”更改为“ 10/1/19”。以下内容适用于大多数日期,但会将月份的第一天更改为上个月:

ts = '2016-03-05 00:20:02'
pd.to_datetime(ts) - pd.offsets.MonthBegin(1)
# returns 'Timestamp('2016-03-01 00:20:02')'

ts = '2016-03-01 00:20:02'
pd.to_datetime(ts) - pd.offsets.MonthBegin(1)
# returns 'Timestamp('2016-02-01 00:20:02')'

ts = '2016-03-01 00:20:02'
pd.to_datetime(ts) + pd.offsets.MonthBegin(1) - pd.offsets.MonthBegin(1)
# returns 'Timestamp('2016-03-01 00:20:02')'

我在第三个示例中找到了解决方案。首先更新到月底,然后再更新回开始。考虑到这种转换的普遍性,我觉得应该有一种更Python化的方法来进行此操作。

python pandas
1个回答
0
投票

[rollback功能提供所需的功能:

rollback


如果您有一个datetime列,并且希望将其缩减为几个月,则还可以临时更改基础numpy ts1 = '2016-03-05 00:20:02' ts2 = '2016-03-01 00:20:02' ts3 = '2016-03-31 00:20:02' pd.offsets.MonthBegin().rollback(ts1) #Timestamp('2016-03-01 00:20:02') pd.offsets.MonthBegin().rollback(ts2) #Timestamp('2016-03-01 00:20:02') pd.offsets.MonthBegin().rollback(ts3) #Timestamp('2016-03-01 00:20:02') 类型的精度:
datetime64

(来自df = pd.DataFrame({'Date': ['2016-03-05 00:20:02', '2016-03-01 00:20:02', '2016-03-31 00:20:02']}) df.Date = pd.to_datetime(df.Date) df['Month'] = df.Date.astype('<M8[M]') print(df) # Date Month #0 2016-03-05 00:20:02 2016-03-01 #1 2016-03-01 00:20:02 2016-03-01 #2 2016-03-31 00:20:02 2016-03-01 SO答案)

© www.soinside.com 2019 - 2024. All rights reserved.