在Python中向pandas对象添加月份

2024-04-18 09:33:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dataframe对象:

    Date
2018-12-14
2019-01-11
2019-01-25
2019-02-08
2019-02-22
2019-07-26

如果可能的话,我想要的是添加例如:3 months to the dates,然后是3 months to the new date (original date + 3 months)repeat this x times。我正在使用pd.offsets.MonthOffset,但这只会增加一次月数,我需要做更多次。 我不知道是否可能,但任何帮助都是完美的。 非常感谢你抽出时间。 预期产量为(1个月加2次):

[[2019-01-14, 2019-02-11, 2019-02-25, 2019-03-08, 2019-03-22,  2019-08-26],[2019-02-14, 2019-03-11, 2019-03-25, 2019-04-08, 2019-04-22,  2019-09-26]]

Tags: theto对象dataframenewdatethispd
3条回答

我相信您需要使用f-string循环来获得新的列名:

for i in range(1,4):
    df[f'Date_added_{i}_months'] = df['Date'] + pd.offsets.MonthBegin(i)
print (df)
        Date Date_added_1_months Date_added_2_months Date_added_3_months
0 2018-12-14          2019-01-01          2019-02-01          2019-03-01
1 2019-01-11          2019-02-01          2019-03-01          2019-04-01
2 2019-01-25          2019-02-01          2019-03-01          2019-04-01
3 2019-02-08          2019-03-01          2019-04-01          2019-05-01
4 2019-02-22          2019-03-01          2019-04-01          2019-05-01
5 2019-07-26          2019-08-01          2019-09-01          2019-10-01

或:

for i in range(1,4):
    df[f'Date_added_{i}_months'] = df['Date'] + pd.offsets.MonthOffset(i)
print (df)
        Date Date_added_1_months Date_added_2_months Date_added_3_months
0 2018-12-14          2019-01-14          2019-02-14          2019-03-14
1 2019-01-11          2019-02-11          2019-03-11          2019-04-11
2 2019-01-25          2019-02-25          2019-03-25          2019-04-25
3 2019-02-08          2019-03-08          2019-04-08          2019-05-08
4 2019-02-22          2019-03-22          2019-04-22          2019-05-22
5 2019-07-26          2019-08-26          2019-09-26          2019-10-26

如果你的日期是date对象,那应该很简单。您只需创建一个3个月的timedelta,并将其添加到每个date。你知道吗

或者,您可以使用.strptime()将它们转换为日期对象,然后执行您的建议。您可以使用.strftime()将它们转换回字符串。你知道吗

我希望这有帮助

from dateutil.relativedelta import relativedelta
month_offset = [3,6,9]
for i in month_offset:
    df['Date_plus_'+i+'_months'] = df['Date'].map(lambda x: x+relativedelta(months=i))

相关问题 更多 >