Pandas dataframe threshold - 如果超过,则保持数字固定

问题描述 投票:2回答:1

从第1天到第7天,我有一个三人(John,Terry,Henry)的数据框。

          1     2     3     4     5     6      7
John    1.3   2.8   3.0   4.4   2.6   3.1    4.8
Terry   1.1   2.3   4.1   5.5   3.7   2.1    3.8
Henry   0.3   1.0   2.0   3.0   2.7   1.1    2.8

如何设置分数上限,以便一旦分数达到> 2.5,那么从那天开始的所有分数都是固定的,无论分数是多少

输出应该是:

          1     2     3     4     5     6      7
John    1.3   2.8   2.8   2.8   2.8   2.8    2.8
Terry   1.1   2.3   4.1   4.1   4.1   4.1    4.1
Henry   0.3   1.0   2.0   3.0   3.0   3.0    3.0

试过以下没有用。我首先对所有数字> 2.5到“1”做一个布尔值,然后对累积和应用一个掩码:

df = df.mask((df > 2.5).cumsum(axis=1) > 0, df)
python pandas numpy dataframe boolean
1个回答
2
投票

您可以通过NaN找到where的第一个非bfill值,并选择iloc的第一列:

m = (df > 2.5).cumsum(axis=1) > 0

s = df.where(m).bfill(axis=1).iloc[:, 0]
print (s)
John     2.8
Terry    4.1
Henry    3.0
Name: 1, dtype: float64

df = df.mask(m, s, axis=0)

shift面具和向前填充NaNs持续值:

m = (df > 2.5).cumsum(axis=1) > 0
df = df.mask(m.shift(axis=1).fillna(False)).ffill(axis=1)
print (df)
         1    2    3    4    5    6    7
John   1.3  2.8  2.8  2.8  2.8  2.8  2.8
Terry  1.1  2.3  4.1  4.1  4.1  4.1  4.1
Henry  0.3  1.0  2.0  3.0  3.0  3.0  3.0
© www.soinside.com 2019 - 2024. All rights reserved.