python - 根据每个时间序列的条件识别 DataFrame 中的时间点

标签 python pandas numpy dataframe

我有一个包含时间序列数据的 DataFrame,如下所示:

(TP=时间点)

gene number   TP1   TP2   TP3   TP4   TP5   TP6
gene1         0.4   0.2   0.1   0.5   0.8   1.9
gene2         0.3   0.05  0.5   0.8   1.0   1.7
....

对于每一行(基因),我想确定其值达到比时间序列中最小值大4倍的水平的TP,附加条件是该确定的TP必须在最小TP之后。因此,对于基因 2,我对 TP3 感兴趣,而不是 TP1(比 TP2 最小值大 4 倍),因为 TP1 在系列中早于最小值 TP2。

所以我尝试构建的脚本的结果是这样的:

gene1    TP4
gene2    TP3
...

我的数据存储在 numpy 数组中。

最佳答案

您可以首先创建一个掩码ma,并将最小值之前的所有行值设置为False。接下来,使用此掩码查找每行中最小值之后的值,以达到最小值的 4 倍(由 True 表示):

>>> ma = df.values.argmin(axis=1)[:,None] <= np.arange(df.shape[1])
>>> df.ge(4*df.min(axis=1), axis=0) & ma
         TP1    TP2    TP3   TP4   TP5   TP6
gene1  False  False  False  True  True  True
gene2  False  False   True  True  True  True

然后,您可以使用 idxmax 从此 bool DataFrame(我将其称为 df1)中检索第一个 True 值的标签:

>>> df1.idxmax(axis=1)
gene1    TP4
gene2    TP3
dtype: object

关于python - 根据每个时间序列的条件识别 DataFrame 中的时间点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28506194/

相关文章:

python-2.7 - 基于行索引、列引用的数据框中的返回值

python - 在 pandas df 中添加缺失的日期,但日期范围有(有效)重复项

python - numpy 计算滞后于领导者时间戳和滞后时间戳之间

python - 最近邻插值背后的逻辑

python - numpy:argmin() 和 argmax() 函数的逻辑是什么?

python - 从 Jinja 模板调用 Python 函数

python - 我怎样才能让 xticks 在我的 matplotlib 图上有一个每月的间隔而不是每天

python - 为什么我不能导入这个模块

导入模块的 Python 类型提示

python - filter2D OpenCV 函数 c++