python - 如何从具有限制的不同数据帧中填充数据帧 nan 值?
问题描述
我正在尝试填充限制为 2 的数据帧和来自另一个数据帧的值。但是,在运行以下代码时DF1.fillna(value=DF2,method='ffill',axis=0,limit=2)
,我收到此错误ValueError: Cannot specify both 'value' and 'method'.
DF1 和 DF2 在形状、列和索引上是相同的。
DF1
公司编号 | 2018 年 1 月 1 日 | 2019 年 1 月 1 日 | 2020 年 1 月 1 日 | 2021 年 1 月 1 日 |
---|---|---|---|---|
1 | 10 | 15 | 楠 | 楠 |
2 | 12 | 16 | 楠 | 12 |
3 | 14 | 17 | 楠 | 13 |
4 | 楠 | 18 | 12 | 14 |
5 | 楠 | 18 | 13 | 楠 |
6 | 楠 | 楠 | 14 | 楠 |
DF2
公司编号 | 2018 年 1 月 1 日 | 2019 年 1 月 1 日 | 2020 年 1 月 1 日 | 2021 年 1 月 1 日 |
---|---|---|---|---|
1 | 21 | 31 | 41 | 51 |
2 | 22 | 32 | 42 | 52 |
3 | 23 | 33 | 43 | 53 |
4 | 24 | 34 | 44 | 54 |
5 | 25 | 35 | 45 | 55 |
6 | 26 | 36 | 46 | 56 |
预期结果
公司编号 | 2018 年 1 月 1 日 | 2019 年 1 月 1 日 | 2020 年 1 月 1 日 | 2021 年 1 月 1 日 |
---|---|---|---|---|
1 | 10 | 15 | 楠 | 楠 |
2 | 12 | 16 | 楠 | 12 |
3 | 14 | 17 | 楠 | 13 |
4 | 24 | 18 | 12 | 14 |
5 | 25 | 18 | 13 | 55 |
6 | 楠 | 36 | 14 | 56 |
提前致谢!
解决方案
假设df1
并且df2
具有相同的索引和列,这是解决问题的一种方法:
用前向填充df1
,limit=2
然后用于isna
创建布尔蒙版。mask
现在,对中的值使用这个布尔掩码,最后使用掩码数据框df2
填充 nan 值df1
df2
df1.fillna(df2.mask(df1.ffill(limit=2).isna()))
CompanyId 1/1/2018 1/1/2019 1/1/2020 1/1/2021
0 1 10.0 15.0 NaN NaN
1 2 12.0 16.0 NaN 12.0
2 3 14.0 17.0 NaN 13.0
3 4 24.0 18.0 12.0 14.0
4 5 25.0 18.0 13.0 55.0
5 6 NaN 36.0 14.0 56.0
推荐阅读
- python - 如何使用带图像的边界框进行多标签图像训练?
- html - Border until text content
- uml - UML 用例图 - IF 条件?
- node.js - Angular +Workbox = build ChunkLoadError: Loading chunk # and Refused to execute script because its MIME
- react-native - Why cant xcode find
? - jquery - Selectize.js - Populate select element with result of ajax request
- sql - 多个JOIN,一张表需要两次
- android - Anroid bottomsheet 库 com.cocosw:bottomsheet
- c# - 如何以某种方式显示版本号
- amazon-web-services - Route53、证书管理器和 CloudFront 之间的 CloudFormation 循环依赖关系