gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:50:05 28 4
gpt4 key购买 nike

标题可能不直观——让我举个例子。假设我有 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/

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