如何获取多列timestamp(时间戳)中的最小值?
解决多列时间戳取每行最小值的问题
嘿,这事儿用Python的pandas库就能轻松搞定,咱们一步步来:
步骤1:准备数据并转换时间格式
首先得把你的原始数据转换成pandas的DataFrame,并且把所有timestamp列转换成datetime类型——毕竟字符串没法直接比较时间大小嘛。
import pandas as pd # 构建你的原始数据 data = { 'Id': [136, 245, 257, 258, 480], 'timestamp 1': ['2014-08-27 17:29:23', '2015-09-06 15:46:00', '2014-09-29 22:26:34', pd.NA, '2016-02-02 17:59:54'], 'timestamp 2': ['2014-11-05 13:02:18', pd.NA, '2016-02-02 17:59:54', pd.NA, '2014-11-05 13:02:18'], 'timestamp 3': ['2014-09-29 22:26:34', pd.NA, pd.NA, pd.NA, pd.NA] } df = pd.DataFrame(data) # 将所有timestamp列转换为datetime类型 time_cols = [col for col in df.columns if 'timestamp' in col] df[time_cols] = df[time_cols].apply(pd.to_datetime)
步骤2:计算每行的最小时间戳
用min(axis=1)方法就能对每行取最小值,pandas会自动忽略NaN值,完美符合你的需求:
# 计算每行最小时间戳 df['minimal'] = df[time_cols].min(axis=1) # 提取需要的Id和minimal列 result = df[['Id', 'minimal']]
步骤3:查看结果
打印result就能得到你想要的输出:
print(result.to_string(index=False))
输出结果和你期望的完全一致:
Id minimal 136 2014-08-27 17:29:23 245 2015-09-06 15:46:00 257 2014-09-29 22:26:34 258 NaT 480 2014-11-05 13:02:18
(注:这里的NaT是pandas对缺失时间值的表示,和你示例里的NaN意思完全一样,要是想换成字符串NaN,可以加一行result['minimal'] = result['minimal'].astype(str).replace('NaT', 'NaN'))
内容的提问来源于stack exchange,提问作者Nabih Bawazir
相关产品推荐
相关产品推荐

