我有一个数据框,其中包含从第 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”的数字进行 boolean 运算,然后对累积和应用掩码:
df = df.mask((df > 2.5).cumsum(axis=1) > 0, df)
最佳答案
您可以通过 where
找到第一个非 NaN
值使用 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
掩码并将 NaN
向前填充到最后一个值:
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
关于python - Pandas 数据帧阈值——如果超过则保持数字固定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48811596/