【问题标题】:How to calculate months left to a date with datetime in pandas column?如何计算熊猫列中带有日期时间的日期的剩余月份?
【发布时间】:2019-07-19 13:28:22
【问题描述】:

我想将我的日期列中的所有天数替换为 01(当月的第一天),并计算我的数据框中每个值在某个日期之前剩余的月份。

我的数据框如下所示:

Date
2019-02-10
2017-03-02
2018-02-03

我的日期是2019-10-31。我想知道这两个日期之间有多少个月,并生成一个包含月数的列。

这几天我都试过替换,但没有成功。

对于月份的计算,我将原始日期加一个月(计算所需),生成结束日期(关闭)并简单地减去它们。

dfA.loc[dfA.day > 1, 'DepreDate'] = dfA.date + pd.DateOffset(months=1)

closing = date(today.year, 10, 31)

time_to = abs(dfA.DepreDate - closing)

但我得到了错误:

不支持的操作数类型 -: 'DatetimeIndex' 和 'datetime.date'

编辑(已解决):Ankur Sinha 通过添加解决了它:

dfA['First_Date_Month'] = dfA['date'] + pd.offsets.MonthBegin(1)
dfA['Time_Left_In_Months'] = dfA['Closing'].dt.month - dfA['First_Date_Month'].dt.month

并根据年份增加 12 个月:

dfA.loc[dfA["First_Date_Month"].dt.year == 2018,'Time_Left_In_Months'] = dfA["Time_Left_In_Months"] + 12

【问题讨论】:

  • dfA的全称是什么?

标签: python datetime


【解决方案1】:

如果我理解正确,你有这个:

        Date     Target
0 2019-02-10 2019-10-31
1 2017-03-02 2019-10-31
2 2018-02-03 2019-10-31

您想从原始日期的第一个日期开始添加一个月:

df['First_Date_Month'] = df['Date'] + pd.offsets.MonthBegin(1)

现在找出两个日期之间的月份:

df['Time_Left_In_Months'] = ((df['Target'] - df['First_Date_Month'])/np.timedelta64(1, 'M')).astype(int)

输出:

        Date     Target First_Date_Month  Time_Left_In_Months
0 2019-02-10 2019-10-31       2019-03-01                    8
1 2017-03-02 2019-10-31       2017-04-01                   30
2 2018-02-03 2019-10-31       2018-03-01                   20

【讨论】:

  • 谢谢!这个解决方案是 99% 正确的,但它返回我的月数而不考虑年份。因此,例如第二个应该是 7 + 12 + 12,因为它是 2017 年。
  • 您好,感谢您的澄清。完全错过了。修改它,您可以根据您希望如何四舍五入相应地对其进行加减 1 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-28
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 2018-04-21
  • 2021-12-06
相关资源
最近更新 更多