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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas dataframe threshold - 如果超过,则保持数字固定相关的知识,希望对你有一定的参考价值。

从第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)
答案

您可以通过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

以上是关于Pandas dataframe threshold - 如果超过,则保持数字固定的主要内容,如果未能解决你的问题,请参考以下文章

pandas.DataFrame.loc好慢,怎么遍历访问DataFrame比较快

将 Pandas Multiindexed DataFrame 与 Singleindexed Pandas DataFrame 合并

pandas.DataFrame.loc好慢,怎么遍历访问DataFrame比较快

python pandas dataframe 写入hdfs

pandas怎么选取dataframe中几列

详解pandas获取Dataframe元素值的几种方法