繁体   English   中英

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

[英]Pandas fill NaN in columns based on some conditions

我有一个 pandas dataframe 包含给定 id 的每周值,看起来像:

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。 所以数据框在转换后应该是这样的:

ID val_week1 val_week2 val_week3 val_week4 val_week5
1 3 2 0
2 1 0 0 2 3
3 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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM