[英]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.