python - max 在 min 之前最后一次出现的索引

标签 python pandas numpy indexing

标题可能不直观——让我举个例子。假设我有 df,创建方式:

a = np.array([[ 1. ,  0.9,  1. ],
              [ 0.9,  0.9,  1. ],
              [ 0.8,  1. ,  0.5],
              [ 1. ,  0.3,  0.2],
              [ 1. ,  0.2,  0.1],
              [ 0.9,  1. ,  1. ],
              [ 1. ,  0.9,  1. ],
              [ 0.6,  0.9,  0.7],
              [ 1. ,  0.9,  0.8],
              [ 1. ,  0.8,  0.9]])

idx = pd.date_range('2017', periods=a.shape[0])
df = pd.DataFrame(a, index=idx, columns=list('abc'))

我可以获得每个相应列的最小索引位置

df.idxmin()

现在,我怎样才能得到最后一次出现的列最大值的位置,直到最小值的位置?

在视觉上,我想找到下面绿色最大值的位置:

enter image description here

最小值出现后的最大值被忽略。

我可以用 .apply 做到这一点,但它可以用掩码/高级索引来完成吗?

期望的结果:

a   2017-01-07
b   2017-01-03
c   2017-01-02
dtype: datetime64[ns]

最佳答案

应用掩码,然后在反向数据帧上调用idxmax

df.mask((df == df.min()).cumsum().astype(bool))[::-1].idxmax()

a   2017-01-07
b   2017-01-03
c   2017-01-02
dtype: datetime64[ns]

详情

首先,确定每列最小项目的位置。

df.min()

a    0.6
b    0.2
c    0.1
dtype: float64

i = df == df.min()
i

                a      b      c
2017-01-01  False  False  False
2017-01-02  False  False  False
2017-01-03  False  False  False
2017-01-04  False  False  False
2017-01-05  False   True   True
2017-01-06  False  False  False
2017-01-07  False  False  False
2017-01-08   True  False  False
2017-01-09  False  False  False
2017-01-10  False  False  False

现在,掩盖这些值(value)观及其他值(value)观!

j = df.mask(i).cumsum().astype(bool))
j

              a    b    c
2017-01-01  1.0  0.9  1.0
2017-01-02  0.9  0.9  1.0
2017-01-03  0.8  1.0  0.5
2017-01-04  1.0  0.3  0.2
2017-01-05  1.0  NaN  NaN
2017-01-06  0.9  NaN  NaN
2017-01-07  1.0  NaN  NaN
2017-01-08  NaN  NaN  NaN
2017-01-09  NaN  NaN  NaN
2017-01-10  NaN  NaN  NaN

要找到最后一个最大值,只需反转并调用 idxmax

j[::-1].idxmax()

a   2017-01-07
b   2017-01-03
c   2017-01-02
dtype: datetime64[ns]

关于python - max 在 min 之前最后一次出现的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47892698/

相关文章:

python - random.choice 被字典破坏了

python - Selenium 是否有办法像 Protractor 一样等待 AngularJS?

python - 回滚后"This transaction is closed"

python - 填充 pandas 数据框中的缺失值

python - 比较单个图 python 上的多年数据

python - 如何将像素列表 reshape 为RGB矩阵?

python - python中的几代gc是什么意思?

python - Pandas 通过分割可选的前导非字符串字符来计算新列

python - 如何使用 numpy 数组中的 RGBA 数据列表进行 alpha 合成?

python - 如何粗化二维数组数据分辨率