You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在列名为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 09:57:52