在列名是 datetime 对象的 pandas 数据帧中,如何找到给定行的 True 值的最早实例?

In a pandas dataframe where the column names are datetime objects, how can I find the earliest instance of a True value for a given row?

提问人:Sean R 提问时间:11/14/2023 更新时间:11/14/2023 访问量:58

问:

我有一个数据帧,其中列 ID 是 datetime 对象,值为 True 或 False

编号 2023-10-30 00:00:00 2023-11-01 00:00:00 2023-11-03 00:00:00 2023-11-06 00:00:00 2023-11-08 00:00:00 2023-11-13 00:00:00
加拿大
法国
阿根廷
澳大利亚
摩洛哥
埃塞俄比亚
尼泊尔

我想添加一个新列,用于标识给定行最早的 True 值出现的时间。例如,加拿大的第一次 True 入境发生在 11 月 13 日,而澳大利亚的首次入境发生在 10 月 30 日。最终输出如下所示:

编号 2023-10-30 00:00:00 2023-11-01 00:00:00 2023-11-03 00:00:00 2023-11-06 00:00:00 2023-11-08 00:00:00 2023-11-13 00:00:00 最早的真
加拿大 2023-11-13 00:00:00
法国 2023-11-08 00:00:00
阿根廷 2023-10-30 00:00:00
澳大利亚 2023-10-30 00:00:00
摩洛哥 2023-10-30 00:00:00
埃塞俄比亚 2023-11-08 00:00:00
尼泊尔 2023-10-30 00:00:00

关于如何实现这一目标的任何想法?

Python 熊猫 日期时间

评论

0赞 wjandrea 11/14/2023
你试过什么,你卡在哪里?比如,刚开始,你知道如何使用吗?这些列是日期时间是否真的相关,或者这是一个不重要的细节?您可以编辑以澄清。有关更多提示,请查看如何制作好的可重复大熊猫示例apply

答:

3赞 Andrej Kesely 11/14/2023 #1

试试 idxmax

# convert the columns to datetime (if necessary):
# df.columns = [df.columns[0], *pd.to_datetime(df.columns[1:])]

df["Earliest True"] = df.iloc[:, 1:].idxmax(axis=1)
print(df)

指纹:

          id  2023-10-30 00:00:00  2023-11-01 00:00:00  2023-11-03 00:00:00  2023-11-06 00:00:00  2023-11-08 00:00:00  2023-11-13 00:00:00 Earliest True
0     Canada                False                False                False                False                False                 True    2023-11-13
1     France                False                False                False                False                 True                 True    2023-11-08
2  Argentina                 True                 True                 True                 True                 True                 True    2023-10-30
3  Australia                 True                 True                 True                 True                 True                 True    2023-10-30
4    Morocco                 True                 True                 True                 True                 True                 True    2023-10-30
5   Ethiopia                False                False                False                False                 True                 True    2023-11-08
6      Nepal                 True                 True                 True                 True                 True                 True    2023-10-30