如何在列名为datetime对象的Pandas DataFrame中查找每行最早True值
实现方法
核心思路
通过Pandas的布尔筛选与索引操作,定位每行中值为True的最早时间列,将其作为新列添加到DataFrame中。
步骤与代码示例
1. 准备数据
先确保时间列是datetime类型,单元格值为标准布尔型:
import pandas as pd # 构造对应你提供的表格数据 data = { 'id': ['Canada', 'France', 'Argentina', 'Australia', 'Morocco', 'Ethiopia', 'Nepal'], '2023-10-30 00:00:00': [False, False, True, True, True, False, True], '2023-11-01 00:00:00': [False, False, True, True, True, False, True], '2023-11-03 00:00:00': [False, False, True, True, True, False, True], '2023-11-06 00:00:00': [False, False, True, True, True, False, True], '2023-11-08 00:00:00': [False, True, True, True, True, True, True], '2023-11-13 00:00:00': [True, True, True, True, True, True, True] } df = pd.DataFrame(data) # 将时间列名转为datetime对象,确保值为布尔型 datetime_cols = df.columns[1:] df.columns = ['id'] + pd.to_datetime(datetime_cols).tolist() df[df.columns[1:]] = df[df.columns[1:]].astype(bool)
2. 计算最早True时间
用where过滤掉False值,再通过idxmin获取每行最早的有效时间:
# 新增"Earliest True"列 df['Earliest True'] = df.set_index('id').where(df.set_index('id')).idxmin(axis=1).reset_index(drop=True)
3. 边界处理(可选)
如果存在整行都是False的情况,结果会返回NaN,可按需填充:
# 填充全False行的空值 df['Earliest True'] = df['Earliest True'].fillna('无True值')
最终效果
运行后DataFrame会新增目标列,结果与你提供的示例完全一致。
内容的提问来源于stack exchange,提问作者Sean R
相关产品推荐
相关产品推荐

