【问题标题】:Replacing actual values by np.nan (if threshold is met) over a specific interval在特定间隔内用 np.nan 替换实际值(如果满足阈值)
【发布时间】:2021-04-14 06:38:44
【问题描述】:

作为一个说明性示例,在下面的列表中,假设如果达到 1.45 的阈值,我想用 NaN 填充下一个剩余值,直到下一个初始 NaN 值。在这种情况下,这意味着用 np.nan 替换 1.12 和 1.05。

[1.02, 1.08, 1.45, 1.12, 1.05, nan, nan, nan, nan, 1.13, 1.2, 1.03]

所以预期的结果是:

[1.02, 1.08, 1.45, nan, nan, nan, nan, nan, nan, 1.13, 1.2, 1.03]

我实际上正在使用 DataFrame 的列,但大概相同的逻辑将适用。 有什么方便的方法吗?

【问题讨论】:

  • 在原生 lists 上工作与使用数据框略有不同。我已经发布了一个答案,假设您需要后者。

标签: python pandas numpy nan fillna


【解决方案1】:

如果我正确理解了您的问题:

import pandas as pd
import numpy as np

thresh = 1.45
df = pd.DataFrame.from_dict({'col': [1.02, 1.08, 1.45, 1.12, 1.05, np.nan, np.nan, np.nan, np.nan, 1.13, 1.2, 1.03]})

firstThresh = df['col'].index[df['col']==thresh][0]
firstNan = df['col'].index[df['col'].apply(np.isnan)][0]
#print(firstThresh, firstNan)

df.at[firstThresh + 1 : firstNan, 'col'] = np.nan

print(df)

会产生想要的结果!

【讨论】:

  • 如果这回答了您的问题,请点赞/接受!
猜你喜欢
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多