【问题标题】:smallest value, smallest date, smallest time最小值、最小日期、最小时间
【发布时间】:2021-12-23 15:14:23
【问题描述】:

我有一个数据框

df = pd.DataFrame({"Transaction":["ett852741963", "ett123654789", "ett753951852", "ett159753852"],
                "Arrival Scan":["02-11-2021 23:45:21", "", "05-11-2021 06:12:10", "04-11-2021 08:19:36"],
                  "Unloading Scan":["", "03-11-2021 06:14:22", "03-11-2021 11:41:22", "04-11-2021 14:45:21"],
                  "Unpacking Scan":["", "03-11-2021 8:02:11", "02-11-2021 15:01:02", ""],
                  "Delivery Scan":["04-11-2021 08:32:10", "", "03-11-2021 17:45:16", ""]})


df

    Transaction        Arrival Scan       Unloading Scan       Unpacking Scan        Delivery Scan
0   ett852741963  02-11-2021 23:45:21                                             04-11-2021 08:32:10
1   ett123654789                       03-11-2021 06:14:22  03-11-2021 8:02:11  
2   ett753951852  05-11-2021 06:12:10  03-11-2021 11:41:22  02-11-2021 15:01:02   03-11-2021 17:45:16
3   ett159753852  04-11-2021 08:19:36  04-11-2021 14:45:21  

我想根据 Arrival Scan to Delivery Scan 对每笔交易进行首次扫描,并将其显示在 First Time 列中

这样以后数据框就变成了

    Transaction       Arrival Scan        Unloading Scan      Unpacking Scan        Delivery Scan         First Time
0   ett852741963  02-11-2021 23:45:21                                            04-11-2021 08:32:10  02-11-2021 23:45:21
1   ett123654789                       03-11-2021 06:14:22  03-11-2021 8:02:11                        03-11-2021 06:14:22    
                                       
2   ett753951852  05-11-2021 06:12:10  03-11-2021 11:41:22  02-11-2021 15:01:02  03-11-2021 17:45:16  02-11-2021 15:01:02
3   ett159753852  04-11-2021 08:19:36  04-11-2021 14:45:21                                            04-11-2021 08:19:36

请帮帮我

【问题讨论】:

    标签: python pandas numpy date


    【解决方案1】:

    你可以用nanreplace你的空字符串,然后bfilliloc得到第一个有效值:

    df['First Time'] = df.iloc[:, 1:].replace("", np.nan).bfill(axis=1).iloc[:,0]
    

    另一方面,您应该将日期时间数据视为日期时间,然后,使用您的数据结构,您可以简单地使用min

    df.iloc[:,1] = df.iloc[:, 1:].apply(pd.to_datetime, errors='coerce', dayfirst=True)
    
    df['First Time'] = df.iloc[:, 1:].min(axis=1)
    

    【讨论】:

    • 脚本 'df['First Time'] = df.iloc[:, 1:].replace("", np.nan).bfill(axis=1) 有问题。 iloc[:,0]' 。看,交易 ett753951852 应该是第一次 02-11-2021 15:01:02 而不是 05-11-2021 06:12:10
    • 哦,开箱扫描早于到货扫描?那么你肯定要使用第二种方法。
    • 是的,First Time 必须读取每次 Scan 的最早时间。如果条件是这样,那么脚本是什么?
    • 就像我说的,这是第二种方法。您的日期格式真的不方便比较为字符串...
    猜你喜欢
    • 2021-07-12
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 2019-05-31
    • 2012-07-16
    相关资源
    最近更新 更多