python - Pandas 根据某些条件在列中填充 NaN

标签 python pandas dataframe

我有一个 pandas 数据框,其中包含给定 id 的每周值,看起来像:

<表类=“s-表”> <标题> id val_week1 val_week2 val_week3 val_week4 val_week5 <正文> 1 0 0 3 2 0 2 1 0 0 2 3 3 0 0 0 0 1

我想将一些列值填充为 NaN。这里的条件是 id 的所有值,直到每行中的第一个非零值都必须为 NaN。因此,转换后的数据框应如下所示:

<表类=“s-表”> <标题> id val_week1 val_week2 val_week3 val_week4 val_week5 <正文> 1 NaN NaN 3 2 0 2 1 0 0 2 3 3 NaN NaN NaN NaN 1

我试图通过提取每行的第一个非零值列来解决这个问题,然后它之前的所有值都可以填充为 NaN。但我无法弄清楚如何使用 pandas 来完成它,因为我是新手。
任何帮助将不胜感激。

最佳答案

temp = df.filter(like='val')
temp = temp.mask(temp.cumsum(1).eq(0), np.nan)
df.assign(**temp)
   id  val_week1  val_week2  val_week3  val_week4  val_week5
0   1        NaN        NaN        3.0        2.0          0
1   2        1.0        0.0        0.0        2.0          3
2   3        NaN        NaN        NaN        NaN          1

这个想法是对各列的值进行累积求和; 如果为0,则替换为NAN。

关于python - Pandas 根据某些条件在列中填充 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70132755/

相关文章:

python - 如何进行无限线程评论

使用两个数据帧的 pandas 矢量化函数

python - 删除 Matplotlib、Python 中某些子图的 y 轴刻度标签

python - 根据条件合并两个 DataFrame

python - 生成器表达式 vs yield : Why isn't 'next()' working?

python - 使用 python 请求获取 ('Connection aborted.' 、 OSError(0, 'Error' ) 错误

python - 字符串模块错误,python os x

python - 如果值匹配,则通过 DataFrame 设置 pandas DataFrame 的子集

python - 如何在Python数据框中将一些值剪切到不同的列中?

python - 以合理的方式将字典列表转换为数据框