【问题标题】:Adding rows to pandas dataframe with date range, created_at and today, python将行添加到具有日期范围、created_at 和今天、python 的 pandas 数据框
【发布时间】:2021-01-23 07:06:13
【问题描述】:

我有一个数据框 dataframe,由两列 customer_id 和一个日期列 created_at 组成。

我希望为客户保留在客户群中的每个月添加另一行。

例如,如果 customer_id 是在 7 月创建的,则数据框会在“created_at”和“today”的范围内为该客户添加 4 行额外的行。例如;对于 customer1,我将有 9 行,每个月最多一天,对于 customer2:7 行,而 customer3:4 行。我在想可能像我在下面复制的东西,将 df 与 seqDates 合并的想法......

import pandas as pd
import numpy as np 
df = pd.DataFrame([("customer1", "05-02-2020"), ("customer2","05-04-2020"), ("customer3","04-07-2020")], index=["1","2","3"], columns= ("customer_id","created_at"))
df["created_at"] = pd.to_datetime(df["created_at"])


# create month expansion column 
start = min(df["created_at"])
end = pd.to_datetime("today")
seqDates = pd.date_range(start, end, freq="D")
seqDates = pd.DataFrame(seqDates)
columns = ["created_at"]

【问题讨论】:

    标签: python pandas numpy date expand


    【解决方案1】:

    试试这个:

    import pandas as pd
    import datetime
    from dateutil.relativedelta import relativedelta
    from dateutil import rrule, parser
    
    
    outList = []
    operations_date = datetime.datetime.now().date()
    dfDict = df.to_dict(orient='records')
    for aDict in dfDict:
        created_at = aDict['created_at']
        start_date = datetime.datetime.strptime(created_at, '%d-%m-%Y').date() - 
                     relativedelta(months = 1)
        end_date   = parser.parse(str(operations_date))
        date_range = list(rrule.rrule(rrule.MONTHLY, bymonthday=1, dtstart=start_date, 
                                      until=end_date)) 
        for aDate in date_range:
            outList.append({'customer_id' : aDict['customer_id'], 'created_at' : aDate})
    
    df = pd.DataFrame(outList)
    

    【讨论】:

    • 这正是我想要对我的数据集执行的操作,谢谢。不过,还有一个问题,在我的数据集中,我必须使用 df['created_at'] = pd.to_datetime(df['created_at'], unit='s') 从 Unix 时间转换,这给了我 Year- 的格式月-日-时间戳(类型=Timestamps.timestamps)。当我创建 start_date 时,我被告知“str”对象没有属性“date”。您对如何解决此问题有任何想法吗,参考?您可以在超链接数据框中看到我上面问题中的格式。
    • 我只拿了你的例子 df。您可以使用我用于开始日期的转换。也请点赞:)
    猜你喜欢
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 2020-05-12
    • 2019-08-30
    • 2017-02-06
    • 2011-04-18
    相关资源
    最近更新 更多