首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向左移动多列数据以填充空值

向左移动多列数据以填充空值
EN

Stack Overflow用户
提问于 2022-08-26 05:40:28
回答 1查看 21关注 0票数 0

给定一个数据df,如下所示,请注意,对于每个date列,我们有3个not-na值:

代码语言:javascript
复制
         date      value     20211003     20211010     20211017     20211024
0   2021-9-19  3613.9663          NaN          NaN          NaN          NaN
1   2021-9-26  3613.0673          NaN          NaN          NaN          NaN
2   2021-10-3  3568.1668          NaN          NaN          NaN          NaN
3  2021-10-10  3592.1666  3631.411799          NaN          NaN          NaN
4  2021-10-17  3572.3662  3637.792491  3677.656329          NaN          NaN
5  2021-10-24  3582.6036  3678.800911  3707.926324  3712.669694          NaN
6  2021-10-31  3547.3361          NaN  3731.336899  3735.695071  3733.021293
7   2021-11-7  3491.5677          NaN          NaN  3749.422639  3743.507496
8  2021-11-14  3539.1002          NaN          NaN          NaN  3737.851787
9  2021-11-21  3560.3734          NaN          NaN          NaN          NaN

我想用列将其重新构造为一个新的数据格式:date, value, pred1, pred2, pred3 by:将数据的日期列(20211003, 20211010, 20211017, 20211024)移到左边,以填充空值。

预期结果如下:

代码语言:javascript
复制
         date      value        pred1        pred2        pred3
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  3631.411799          NaN          NaN
4  2021-10-17  3572.3662  3637.792491  3677.656329          NaN
5  2021-10-24  3582.6036  3678.800911  3707.926324  3712.669694
6  2021-10-31  3547.3361  3731.336899  3735.695071  3733.021293
7   2021-11-7  3491.5677  3749.422639  3743.507496          NaN
8  2021-11-14  3539.1002  3737.851787          NaN          NaN
9  2021-11-21  3560.3734          NaN          NaN          NaN

有人能帮忙解决这个问题吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-26 05:47:41

代码语言:javascript
复制
df.iloc[:,:2].join(pd.DataFrame(df.iloc[:, 2:].agg(lambda x: list(x.dropna()), axis=1).to_list()))

         date      value            0            1            2
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  3631.411799          NaN          NaN
4  2021-10-17  3572.3662  3637.792491  3677.656329          NaN
5  2021-10-24  3582.6036  3678.800911  3707.926324  3712.669694
6  2021-10-31  3547.3361  3731.336899  3735.695071  3733.021293
7   2021-11-7  3491.5677  3749.422639  3743.507496          NaN
8  2021-11-14  3539.1002  3737.851787          NaN          NaN
9  2021-11-21  3560.3734          NaN          NaN          NaN

分步骤:

代码语言:javascript
复制
pd.DataFrame(df.iloc[:, 2:].agg(lambda x: list(x.dropna()), axis=1).to_list())
Out[57]: 
             0            1            2
0          NaN          NaN          NaN
1          NaN          NaN          NaN
2          NaN          NaN          NaN
3  3631.411799          NaN          NaN
4  3637.792491  3677.656329          NaN
5  3678.800911  3707.926324  3712.669694
6  3731.336899  3735.695071  3733.021293
7  3749.422639  3743.507496          NaN
8  3737.851787          NaN          NaN
9          NaN          NaN          NaN

然后将/串联/连接到最初的前2列

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73496519

复制
相关文章

相似问题

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