如何在不包括特定值的数据框中获取最小时间值
Posted
技术标签:
【中文标题】如何在不包括特定值的数据框中获取最小时间值【英文标题】: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)
【问题讨论】:
【参考方案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 格式过滤,现在可以使用。我尝试了您的代码的第二选择,它可以工作。
现在,我可以看到我无法在您的网站上提问,能否请您允许我稍后再提问?以上是关于如何在不包括特定值的数据框中获取最小时间值的主要内容,如果未能解决你的问题,请参考以下文章