【问题标题】:Adding months to a date variable in pandas dataframe将月份添加到熊猫数据框中的日期变量
【发布时间】:2020-11-28 00:39:58
【问题描述】:

我有一个如下的熊猫数据框:

import pandas as pd
df = pd.DataFrame({'date1':['12/1/2019','12/1/2019','12/1/2019'], 'nb_months':[11,11,12]})
df['date1'] = pd.to_datetime(df['date1'], format='%m/%d/%Y', errors='coerce').dropna()
df

    date1       nb_months
0   2019-12-01  11
1   2019-12-01  11
2   2019-12-01  12

我想将 nb_months 添加到 date1 列。我确实尝试了下面的代码,但输出不是我所期望的。下面的代码给了我 1 个之前的日期作为输出(例如第一行:date3 应该是 2019-12-01 + 11 个月 = 2020-11-01而我得到 2020-10-31。

df['date3'] = df.apply(lambda x: x['date1'] + pd.offsets.MonthEnd(x['nb_months']), axis=1)
df

    date1       nb_months   date3
0   2019-12-01  11          2020-10-31
1   2019-12-01  11          2020-10-31
2   2019-12-01  12          2020-11-30

我的预期输出:

    date1       nb_months   date3
0   2019-12-01  11          2020-11-01
1   2019-12-01  11          2020-11-01
2   2019-12-01  12          2020-12-01

【问题讨论】:

标签: pandas python-3.6


【解决方案1】:

我想你想要MonthBegin,而不是MonthEnd,以便在每个月的第一天获得新的日期。这是您的示例的略微修改版本:

# set up the data frame
df = pd.DataFrame(
    {'date1': ['12/1/2019', '12/2/2019', '12/2/2019', '12/3/2019', '12/31/2019'], 
     'nb_months': [0, 1, 2, 3,  0]})

df['date1'] = pd.to_datetime(
    df['date1'], format='%m/%d/%Y', errors='coerce').dropna()

# apply the offsets
df['date3'] = df.apply(
    lambda x: x['date1'] + pd.offsets.MonthBegin(x['nb_months']), axis=1)

print(df)


       date1  nb_months      date3
0 2019-12-01          0 2019-12-01
1 2019-12-02          1 2020-01-01
2 2019-12-02          2 2020-02-01
3 2019-12-03          3 2020-03-01
4 2019-12-31          0 2020-01-01

【讨论】:

    【解决方案2】:

    使用pd.DateOffset

    df.apply(lambda x: x['date1'] + pd.DateOffset(months=x['nb_months']), axis=1)
    
    Out[41]:
    0   2020-11-01
    1   2020-11-01
    2   2020-12-01
    dtype: datetime64[ns]
    

    【讨论】:

      猜你喜欢
      • 2015-07-31
      • 1970-01-01
      • 2017-06-14
      • 2020-09-11
      • 2021-09-22
      • 2021-07-25
      • 2021-03-12
      • 2023-03-20
      • 2019-09-12
      相关资源
      最近更新 更多