gpt4 book ai didi

python - 当一列满足基于另一列的特定条件时,有没有办法迭代地查找数据帧的索引?

转载 作者:太空宇宙 更新时间:2023-11-03 21:39:59 26 4
gpt4 key购买 nike

我有一个以 ReadTime 作为索引的 pandas 数据框,如下所示:

  ReadTime    A       B
2/4/18 0:00 6008.6 6013.55
2/4/18 0:01 6008.65 6013.6
2/4/18 0:02 6009.15 6014.05
2/4/18 0:03 6014.00 6014.1
2/4/18 0:04 6009.1 6013.7
2/4/18 0:05 6008.75 6013.65
2/4/18 0:06 6008.7 6013.25
2/4/18 0:07 6008.3 6013.25
2/4/18 0:08 6015.00 6013
2/4/18 0:09 6008.3 6003.55
2/4/18 0:10 6008.65 6013.65
2/4/18 0:11 6008.75 6013.6
2/4/18 0:12 6008.7 6013.7
2/4/18 0:13 6008.65 6013.55
2/4/18 0:14 6014.00 6013.3
2/4/18 0:15 6008.6 6013.5
2/4/18 0:16 6008.55 6013.4
2/4/18 0:17 6008.55 6013.55
2/4/18 0:18 6008.65 6013.55
2/4/18 0:19 6018 6013.6

我想迭代检查 A 中的值是否大于或等于 B 中的值,并创建一个带有发生时间的时间戳的新数据帧。使用满足先前条件的时间戳重复分析。

示例结果如下:

  ReadTime      C
2/4/18 0:00 2/4/18 0:03
2/4/18 0:03 2/4/18 0:08
2/4/18 0:08 2/4/18 0:14
2/4/18 0:14 2/4/18 0:19

感谢您提前提供的帮助。

编辑: C 列是指满足条件的时间戳。 (即,考虑到时间戳中的值,A 中的值大于或等于 B 中的值。例如:在 2018 年 2 月 4 日 0:00,B 的值是 6013.55。因此,在该时间戳之后查看 A 中的值,可以看到,在 2/4/18 0:03,A 的值为 6014,超过了 B 的值(6013.55),所以将 2/4/18 0:03 带入 C 对应的 2/4/18 0:00。

最佳答案

这是(如果我理解正确的话)一个解决方案:

import numpy as np
df['C'] = np.where(df.A > df.B, df.index, np.nan).bfill().shift(-1)
df['X'] = (df.A > df.B).cumsum()
df = df.drop_duplicates(subset=['X'], keep='first')
df = df[['C']]

首先,我们用满足条件的行的时间戳填充名为 C 的列,并将 NaN 放在其他位置。我们回填它,以便所有先前的行都具有相同的时间戳(直到最后一次满足条件的行)。然后我们向后移动一行(为下一步做准备)。

为了使索引按照您想要的方式对齐,我们需要对行进行分组。我们可以通过组合您的条件和 cumsum() 来实现此目的,它将 True 视为 1 并将 False 视为 0。现在我们可以删除组中除第一行之外的所有行(在 C 中所有行都具有相同的时间戳)。这应该会给你你想要的输出。

注意:您想要的输出与您的输入不匹配(在2/4/18 0:03B大于,不小于,A),因此答案与您的示例并不完全匹配。但我想我已经明白了你所问的精神 - 如果我是对的,请纠正问题,如果我错了,请发表评论,我会更改我的答案。

关于python - 当一列满足基于另一列的特定条件时,有没有办法迭代地查找数据帧的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52939281/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com