python - Pandas 数据帧阈值——如果超过则保持数字固定

标签 python pandas numpy dataframe boolean

我有一个数据框,其中包含从第 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/

相关文章:

python - numpy 数组中的快速替换

Python将Excel 2004 xml转换为csv(或excel)

python - dir_util.copy_tree 在 shutil.rmtree 之后失败

python - 连接和排序表未按预期工作

python - 你如何拆开 DataFrame 中的列?

python - Odoo 通过 api 计算税费

python - 从句子列中提取新特征 - Python

python - 在 iter 上并行化循环

python - 如何在 numpy 中创建 3 维矩阵,如 matlab a(:, :, :)

python - 多维数组上的 numpy 高级索引