【问题标题】:Find needed datetime between two columns of datetime在两列日期时间之间查找所需的日期时间
【发布时间】:2021-01-07 09:59:26
【问题描述】:

我是 Python 和编程方面的菜鸟,这就是为什么,如果我在描述我的请求时有错误,请不要评判我。所以我需要解决一个任务。

我有两个 DateFrame。其中之一有 20 000 行和三列:id_clients、start_time_visit、end_time_visit。 DateFrame 的名称 = 访问次数 这是用户对网站的访问。

Second DateFreme 有 800 行,并且有列:id_lead、time_create_lead、model。 此数据来自 CRM 系统。

所以我需要找出来自网站的哪些 id_clients 在 CRM 中创建了潜在客户。

我认为我可以从周期申请,例如:start_time

我已经写了这段代码:

dict_time = crm.set_index('time_create_lead').to_dict() # create a dict


def time_search (row):
""" This function has to return a row with create_time_of_lead"""

    time_start = row['start_time']
    time_end = row['end_time']
    if time_start <= dict_time <= time_end:
        return value
    else:
        return 0

goals['leed'] = goals.apply(time_search, axis=1)
  

但我有这个错误:TypeError: '&lt;=' not supported between instances of 'Timestamp' and 'dict'

我研究了互联网,但没有找到解决这个问题的方法。我将不胜感激。

【问题讨论】:

    标签: python pandas dataframe datetime cycle


    【解决方案1】:
    df = pd.DataFrame(columns=["one", "two"])
    
    df.one = ["2019-01-24","2019-01-27"]
    df.one = pd.to_datetime(df.one)
    
    df.two = ["2019-01-28", "2020-01-29"]
    df.two = pd.to_datetime(df.two)
    
    print(df)
    
    difference = (df.two - df.one)
    

    让我知道这种方法是否适合您。

    【讨论】:

    • 您好阿瑞斯,感谢您的回复。也许我的描述不正确,尝试用另一种方式解释:df.one = ['21.09.2020 16:21'] df.two = ['21.09.2020 16:33'] df2 = ['21.09.2020 16:30 '] 我需要:df3 = df['one', 'two'], df2 # 我需要一个df中的三列。
    【解决方案2】:

    如果我确实了解您想要做什么; 您希望返回在 CRM 中创建潜在客户的访问者的 clients_id。

    为此,您需要检查每个 time_of_create_lead 是否介于 start_time 和 end_time 之间。如果为真,您将返回这些日期对应的clients_id。

    这是一个可以完成这项工作的代码(鉴于您的数据量很大,这可能会很耗时):

    lead_creators = pd.DataFrame(columns=['id_clients', 'id_lead', 'start_time_visit',
                                      'time_create_lead', 'end_time_visit'])
    
    visits['start_time_visit'] = pd.to_datetime(visits['start_time_visit'])
    visits['end_time_visit'] = pd.to_datetime(visits['end_time_visit'])
    crm['time_create_lead'] = pd.to_datetime(crm['time_create_lead'])
    
    for j in visits.index:
        for t in crm.index:
            if visits.iloc[j,1]<=crm.iloc[t,1]<=visits.iloc[j,2]:
                lead_creators = lead_creators.append({'id_clients' : visits.iloc[j,0],
                        'id_lead': crm.iloc[t,0], 'start_time_visit': visits.iloc[j,1],
                        'time_create_lead':crm.iloc[t,1],'end_time_visit':visits.iloc[j,2]},
                                                     ignore_index=True)
    
    lead_creators
    

    我已经尝试过一个小型数据集,效果很好。

    【讨论】:

      【解决方案3】:

      如果我正确理解了您的问题并发表了评论,这应该可行-

      df3.one = df.one
      df3.two = df.two
      df3.df2_date = df2.values()
      

      【讨论】:

        猜你喜欢
        • 2014-11-22
        • 2021-09-18
        • 1970-01-01
        • 2018-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-19
        相关资源
        最近更新 更多