python-3.x - 用 NaN 填充条件后的值

标签 python-3.x pandas numpy

我有一个这样的 df:

df = pd.DataFrame(
    [
        ['A', 1],
        ['A', 1],
        ['A', 1],
        ['B', 2],
        ['B', 0],
        ['A', 0],
        ['A', 1],
        ['B', 1],
        ['B', 0]
    ], columns = ['key', 'val'])
df
打印:
    key val
0   A   1
1   A   1
2   A   1
3   B   2
4   B   0
5   A   0
6   A   1
7   B   1
8   B   0
我想填充 val 列中 2 之后的行(在示例中,val 列中从第 3 行到第 8 行的所有值都替换为 nan)。
我试过这个:
df['val'] = np.where(df['val'].shift(-1) == 2, np.nan, df['val'])
并像这样迭代行:
for row in df.iterrows():
    df['val'] = np.where(df['val'].shift(-1) == 2, np.nan, df['val'])
但无法让它向前填充nan。

最佳答案

您可以使用 boolean indexingcummax填写 nan值(value)观:

df.loc[df['val'].eq(2).cummax(), 'val'] = np.nan
或者,您也可以使用 Series.mask :
df['val'] = df['val'].mask(lambda x: x.eq(2).cummax())
  key  val
0   A  1.0
1   A  1.0
2   A  1.0
3   B  NaN
4   B  NaN
5   A  NaN
6   A  NaN
7   B  NaN
8   B  NaN

关于python-3.x - 用 NaN 填充条件后的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64025109/

相关文章:

python - 如何使用单个脚本从具有不同源代码的不同站点抓取数据?

python - 参数中带有比较运算符的 numpy 均值

python - “SSL: CERTIFICATE_VERIFY_FAILED” mac 错误

python - 如何在 pandas 中添加 concat 指示符列?

python - 合并 Pandas Dataframes - 保留原始顺序并覆盖列

python - 将 df1 列 1 与 df2 中的所有列进行比较,返回 df2 的索引

Python ValueError : non-broadcastable output operand with shape (124, 1) 与广播形状不匹配 (124,13)

python - 如何对列表中的多个字符串进行切片?

python - 在 filter() 中使用 has_key() 的最快方法?

python - python3.4中的QWebPage和pymongo在哪里可以找到?