提问人:Sean R 提问时间:11/14/2023 更新时间:11/14/2023 访问量:58
在列名是 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?
问:
我有一个数据帧,其中列 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 |
关于如何实现这一目标的任何想法?
答:
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
评论
apply