【问题标题】:Add Months column to a Date column in Pandas在 Pandas 中将 Months 列添加到 Date 列
【发布时间】:2020-11-03 04:59:05
【问题描述】:

我想将包含月份数的列添加到包含日期的列中。到目前为止,我已经尝试过 (pd.DateOffset(months=plus_month_period)) 但是“月”不接受列,只是一个数字。我最成功的尝试如下:

dates = {'Date': ['24/04/2019','24/04/2019','2011/05/30'], 'Months':[2,12,100]}
df = pd.DataFrame(dates, columns = ['Date','Months'])

month_sum = pd.to_datetime(df['Date']).dt.to_period('m')
df['Add_month'] = ((month_sum + np.array(df['Months'])).dt.strftime('%Y/%m')).astype(str) + '/' + (pd.to_datetime(df['Date']).dt.day).astype(str)

print(pd.to_datetime(df['Add_month']))

这会导致:

0   2019-06-24
1   2020-04-24
2   2023-11-30

我对这个解决方案的问题是,在创建列 df['Add_month'] 时,我基本上是在末尾添加一个硬编码字符串,以尝试添加“day”部分,有时会导致计算不准确。有没有更直接的方法来添加 Months 列和 Date 列?

【问题讨论】:

标签: python pandas date timestamp multiple-columns


【解决方案1】:

我有类似的东西。我有一列日期为AppEntryCompleteDate,我想将Term 添加到其中以生成Maturity 日期:

这是初始数据结构(代码会将 Col 3 添加到 Col 0):

# adds Term to AppEntryCompletedDate to create Maturity column   
keyLoanRollup['Maturity'] = keyLoanRollup.apply(lambda x: x['AppEntryCompletedDate'] + pd.DateOffset(months = x['Term']), axis=1)

这是Maturity作为新列之后的结构:

【讨论】:

    【解决方案2】:

    一个循环就足够了

    import pandas as pd
    
    dates = {'Date': ['24/04/2019','24/04/2019','2011/05/30'], 'Months':[2,12,150]}
    df = pd.DataFrame(dates, columns = ['Date','Months'])
    df['Add_month'] = pd.to_datetime(df['Date']).dt.date
    
    months = [2,12,150]
    j = 0
    for i in df['Add_month']:
        print(i)
        print(i + pd.DateOffset(months=months[j]))
        j += 1
    

    【讨论】:

    猜你喜欢
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 2020-12-28
    • 2020-08-24
    • 2017-06-04
    • 1970-01-01
    • 2017-05-02
    相关资源
    最近更新 更多