首页 > 解决方案 > 如何从具有限制的不同数据帧中填充数据帧 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

提前致谢!

标签: pythonpandasfillna

解决方案


假设df1并且df2具有相同的索引和列,这是解决问题的一种方法:

用前向填充df1limit=2然后用于isna创建布尔蒙版。mask现在,对中的值使用这个布尔掩码,最后使用掩码数据框df2填充 nan 值df1df2

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

推荐阅读