【问题标题】:How to get the minimum time value in a dataframe with excluding specific value如何在不包括特定值的数据框中获取最小时间值
【发布时间】:2021-04-01 00:10:34
【问题描述】:

我有一个格式如下的数据框。我希望获取每列的最小时间值并将其保存在一个列表中,其中不包括特定时间值,其格式 (00:00:00) 是数据框中任何列中的最小值。

df =  

    10.0.0.155  192.168.1.240   192.168.0.242

0    19:48:46      16:23:40      20:14:07

1    20:15:46      16:23:39      20:14:09

2    19:49:37      16:23:20      00:00:00

3    20:15:08      00:00:00      00:00:00

4    19:48:46      00:00:00      00:00:00

5    19:47:30      00:00:00      00:00:00

6    19:49:13      00:00:00      00:00:00

7    20:15:50      00:00:00      00:00:00

8    19:45:34      00:00:00      00:00:00

9    19:45:33      00:00:00      00:00:00

我尝试使用下面的代码,但它不起作用:

minValues = []

for column in df:

    #print(df[column])

    if "00:00:00" in df[column]:

        minValues.append (df[column].nlargest(2).iloc[-1])

    else:

        minValues.append (df[column].min()) 

print (df)     
   
print (minValues)

【问题讨论】:

    标签: python-3.x pandas dataframe min


    【解决方案1】:

    想法是将0 替换为缺失值,然后获得最小时间增量:

    df1 = df.astype(str).apply(pd.to_timedelta)
    
    s1 = df1.mask(df1.eq(pd.Timedelta(0))).min()
    print (s1)
    10.0.0.155      0 days 19:45:33
    192.168.1.240   0 days 16:23:20
    192.168.0.242   0 days 20:14:07
    dtype: timedelta64[ns]
    

    或者获得最少的日期时间和最后一次将输出转换为HH:MM:SS 值:

    df1 = df.astype(str).apply(pd.to_datetime)
    
    s2 = (df1.mask(df1.eq(pd.to_datetime("00:00:00"))).min().dt.strftime('%H:%M:%S')
    print (s2)
    10.0.0.155       19:45:33
    192.168.1.240    16:23:20
    192.168.0.242    20:14:07
    dtype: object
    

    或时间:

    df1 = df.astype(str).apply(pd.to_datetime)
    
    s3 = df1.mask(df1.eq(pd.to_datetime("00:00:00"))).min().dt.time
    print (s3)
    10.0.0.155       19:45:33
    192.168.1.240    16:23:20
    192.168.0.242    20:14:07
    dtype: object
    

    【讨论】:

    • 它只给了我第一列“10.0.0.155 19:45:25”的最小时间值。
    • 我试过 "df1 = df.replace("00:00:00", np.nan).min()" 它也给了我第一列的最小时间值
    • @Elwakdy - 所有列都按HH:MM:SS 格式填充吗?这 3 种解决方案的效果如何?
    • 是的,它按 HH:MM:SS 格式过滤,现在可以使用。我尝试了您的代码的第二选择,它可以工作。
    • 现在,我可以看到我无法在您的网站上提问,能否请您允许我稍后再提问?
    猜你喜欢
    • 2014-07-09
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多