首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多个列上迭代,并在这些列中用空值替换前面一行(增量)的值。

在多个列上迭代,并在这些列中用空值替换前面一行(增量)的值。
EN

Stack Overflow用户
提问于 2022-08-26 04:15:58
回答 1查看 25关注 0票数 0

给出如下数据格式的df:

代码语言:javascript
复制
          date      value     20211003     20211010     20211017
0    2021-9-19  3613.9663          NaN          NaN          NaN
1    2021-9-26  3613.0673          NaN          NaN          NaN
2    2021-10-3  3568.1668          NaN          NaN          NaN
3   2021-10-10  3592.1666  3510.221000          NaN          NaN
4   2021-10-17  3572.3662  3465.737012  3534.220800          NaN
5   2021-10-24  3582.6036  3479.107035  3539.856801  3514.420400
6   2021-10-31  3547.3361  3421.161235  3481.911001  3456.474600
7    2021-11-7  3491.5677  3370.140147  3439.284539  3416.621024
8   2021-11-14  3539.1002  3319.289523  3391.930037  3370.079953
9   2021-11-21  3560.3734  3261.343723  3333.984237  3312.134153
10  2021-11-28  3564.0894  3255.328902  3338.967086  3305.054247
11   2021-12-5  3607.4320  3313.274702  3396.912886  3363.000047
12  2021-12-12  3666.3479  3371.220502  3450.172564  3412.234440
13  2021-12-19  3632.3638          NaN  3466.930383  3428.683490
14  2021-12-26  3618.0535          NaN          NaN  3370.737690

假设值列后面的列(202110032021101020211017)是滚动的值预测结果,而不是每个列的10个值,我只需要保留3个值。下面是切片规则:从左到右,从下到上为每个日期列保留3个值,因此从20211003列中的行20211003将是起点,然后逐日递增。预期结果如下:

代码语言:javascript
复制
          date      value     20211003     20211010    20211017
0    2021-9-19  3613.9663          NaN          NaN         NaN
1    2021-9-26  3613.0673          NaN          NaN         NaN
2    2021-10-3  3568.1668          NaN          NaN         NaN
3   2021-10-10  3592.1666          NaN          NaN         NaN
4   2021-10-17  3572.3662          NaN          NaN         NaN
5   2021-10-24  3582.6036          NaN          NaN         NaN
6   2021-10-31  3547.3361          NaN          NaN         NaN
7    2021-11-7  3491.5677          NaN          NaN         NaN
8   2021-11-14  3539.1002          NaN          NaN         NaN
9   2021-11-21  3560.3734          NaN          NaN         NaN
10  2021-11-28  3564.0894  3255.328902          NaN         NaN
11   2021-12-5  3607.4320  3313.274702  3396.912886         NaN
12  2021-12-12  3666.3479  3371.220502  3450.172564  3412.23444
13  2021-12-19  3632.3638          NaN  3466.930383  3428.68349
14  2021-12-26  3618.0535          NaN          NaN  3370.73769

我怎么能在潘达斯实现这一点?谢谢。

参考:

Iterate over multiple columns and replace the values in these columns after a row (increment) with null values

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-26 04:29:20

代码语言:javascript
复制
df.iloc[:, :2].join(df.iloc[:, 2:].apply(lambda x:x.dropna().tail(3)))
 
          date      value     20211003     20211010    20211017
0    2021-9-19  3613.9663          NaN          NaN         NaN
1    2021-9-26  3613.0673          NaN          NaN         NaN
2    2021-10-3  3568.1668          NaN          NaN         NaN
3   2021-10-10  3592.1666          NaN          NaN         NaN
4   2021-10-17  3572.3662          NaN          NaN         NaN
5   2021-10-24  3582.6036          NaN          NaN         NaN
6   2021-10-31  3547.3361          NaN          NaN         NaN
7    2021-11-7  3491.5677          NaN          NaN         NaN
8   2021-11-14  3539.1002          NaN          NaN         NaN
9   2021-11-21  3560.3734          NaN          NaN         NaN
10  2021-11-28  3564.0894  3255.328902          NaN         NaN
11   2021-12-5  3607.4320  3313.274702  3396.912886         NaN
12  2021-12-12  3666.3479  3371.220502  3450.172564  3412.23444
13  2021-12-19  3632.3638          NaN  3466.930383  3428.68349
14  2021-12-26  3618.0535          NaN          NaN  3370.73769
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73496031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档