从第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)
答案 0 :(得分: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
掩码和转发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