【问题标题】:"Is there any function in python like minifs and maxifs which compare two different dataframe“python中有没有像minifs和maxifs这样比较两个不同数据帧的函数
【发布时间】:2019-08-30 18:16:33
【问题描述】:

我有两个数据框,一个包含唯一的 customer_id 和 customer_name,另一个数据框包含时间戳格式的登录信息。我想要第一次登录日期和最后一次注销日期

第一个数据集

第二个数据集

它应该创建一个新列 first_login 和 last_login 并将最小 start_time 和最大 end_time 分配给这些唯一的 customer_id

import pandas as pd
customer_unique = pd.read_excel('D:\\python\\customer.xlsx')
customer_time = pd.read_excel('D:\\python\\customer_login.xlsx')

new = customer_unique.loc[customer_unique.'customer_id' == customer_time.'customer_id','begin'] = customer_time('start_datetime').min()

期望的结果

【问题讨论】:

    标签: python pandas numpy datetime data-analysis


    【解决方案1】:

    >>> df1
      Customer_ID Customer
    0       EM065     Yash
    1       EM077    Rahul
    2       EM094   Rakesh
    3       EM054    Dhanu
    4       EM067    Ankit
    5       EM023   Venkat
    6       EM072   Ramesh
    >>> df2
       Customer_ID          Start_Time            End_Time
    0        EM065 2019-11-02 07:38:00 2019-11-02 09:26:00
    1        EM077 2019-02-01 07:19:00 2019-02-01 11:05:00
    2        EM065 2019-02-01 11:04:00 2019-02-01 11:44:00
    3        EM072 2019-03-01 06:55:00 2019-03-01 08:55:00
    4        EM067 2019-03-01 13:09:00 2019-03-01 14:21:00
    5        EM067 2019-04-01 04:04:00 2019-04-01 06:18:00
    6        EM067 2019-04-01 06:18:00 2019-04-01 06:18:00
    7        EM094 2019-04-01 06:18:00 2019-04-01 06:18:00
    8        EM023 2019-04-01 04:00:00 2019-04-01 06:19:00
    9        EM077 2019-04-01 06:19:00 2019-04-01 06:19:00
    10       EM065 2019-04-01 06:19:00 2019-04-01 06:19:00
    11       EM094 2019-04-01 06:16:00 2019-04-01 10:11:00
    12       EM065 2019-04-01 07:01:00 2019-04-01 11:53:00
    13       EM077 2019-04-01 10:11:00 2019-04-01 10:11:00
    14       EM054 2019-04-01 10:11:00 2019-04-01 10:11:00
    15       EM065 2019-04-01 10:11:00 2019-04-01 10:11:00
    16       EM065 2019-04-01 11:53:00 2019-04-01 11:53:00
    17       EM072 2019-04-01 11:53:00 2019-04-01 11:53:00
    18       EM072 2019-04-01 12:38:00 2019-04-01 14:54:00
    19       EM077 2019-04-01 14:54:00 2019-04-01 14:54:00
    20       EM067 2019-04-01 14:54:00 2019-04-01 14:54:00
    21       EM094 2019-06-01 05:09:00 2019-06-01 07:53:00
    22       EM072 2019-06-01 07:53:00 2019-06-01 07:53:00
    23       EM077 2019-06-01 07:53:00 2019-06-01 07:53:00
    24       EM065 2019-01-24 05:58:00 2019-01-24 05:58:00
    25       EM077 2019-01-25 09:21:00 2019-01-25 12:26:00
    26       EM067 2019-01-25 09:22:00 2019-01-25 12:27:00
    27       EM072 2019-01-25 12:26:00 2019-01-25 15:48:00
    28       EM067 2019-01-25 12:27:00 2019-01-25 15:50:00
    29       EM094 2019-01-25 15:48:00 2019-01-25 15:48:00
    30       EM077 2019-01-25 15:48:00 2019-01-25 15:48:00
    31       EM067 2019-01-25 15:49:00 2019-01-25 16:14:00
    32       EM094 2019-01-25 15:50:00 2019-01-25 16:15:00
    33       EM077 2019-01-25 16:14:00 2019-01-25 16:14:00
    34       EM065 2019-01-25 16:15:00 2019-01-25 16:15:00
    35       EM065 2019-01-25 16:15:00 2019-01-25 16:15:00
    36       EM072 2019-01-24 05:58:00 2019-01-24 05:58:00
    37       EM067 2019-01-14 04:20:00 2019-01-14 06:02:00
    38       EM065 2019-01-14 06:02:00 2019-01-14 06:02:00
    39       EM065 2019-01-14 06:02:00 2019-01-14 06:02:00
    40       EM054 2019-01-25 03:58:00 2019-01-25 06:52:00
    41       EM023 2019-01-25 03:59:00 2019-01-25 06:53:00
    42       EM077 2019-01-25 06:52:00 2019-01-28 03:39:00
    43       EM094 2019-01-25 06:53:00 2019-01-28 03:42:00
    44       EM065 2019-01-28 03:39:00 2019-01-28 03:39:00
    45       EM067 2019-01-28 03:39:00 2019-01-28 03:39:00
    46       EM077 2019-01-28 03:42:00 2019-01-28 03:42:00
    47       EM065 2019-01-28 03:42:00 2019-01-28 03:42:00
    48       EM094 2019-01-28 03:42:00 2019-01-28 03:42:00
    49       EM077 2019-01-18 03:48:00 2019-01-18 03:48:00
    50       EM065 2019-01-18 03:48:00 2019-01-18 03:48:00
    

    我们这样做:

    res = df2.groupby('Customer_ID').agg({'Start_Time': min, 'End_Time': max})
    res.insert(0, 'Customer', df1.set_index('Customer_ID'))
    res.reset_index()
    

    结果:

      Customer_ID Customer          Start_Time            End_Time
    0       EM023   Venkat 2019-01-25 03:59:00 2019-04-01 06:19:00
    1       EM054    Dhanu 2019-01-25 03:58:00 2019-04-01 10:11:00
    2       EM065     Yash 2019-01-14 06:02:00 2019-11-02 09:26:00
    3       EM067    Ankit 2019-01-14 04:20:00 2019-04-01 14:54:00
    4       EM072   Ramesh 2019-01-24 05:58:00 2019-06-01 07:53:00
    5       EM077    Rahul 2019-01-18 03:48:00 2019-06-01 07:53:00
    6       EM094   Rakesh 2019-01-25 06:53:00 2019-06-01 07:53:00
    

    【讨论】:

      【解决方案2】:

      这就是我要做的事情

      1. 在第二个数据帧上按客户分组。
      2. 在分组数据帧上找到第一个“开始”和最后一个“结束”
      3. 将第 2 步的结果加入第一个数据帧

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-21
        相关资源
        最近更新 更多