如何使用限制填充来自不同数据框的数据框 nan 值?
How can I ffill a datframe nan values from a diffrent dataframe with limit?
我正在尝试使用限制为 2 和来自另一个数据帧的值来填充数据帧。但是,当 运行 以下代码 DF1.fillna(value=DF2,method='ffill',axis=0,limit=2)
时,出现此错误 ValueError: Cannot specify both 'value' and 'method'.
DF1 和 DF2 在形状、列和索引方面相同。
DF1
CompanyId
1/1/2018
1/1/2019
1/1/2020
1/1/2021
1
10
15
nan
nan
2
12
16
nan
12
3
14
17
nan
13
4
nan
18
12
14
5
nan
18
13
nan
6
nan
nan
14
nan
DF2
CompanyId
1/1/2018
1/1/2019
1/1/2020
1/1/2021
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
预期结果
CompanyId
1/1/2018
1/1/2019
1/1/2020
1/1/2021
1
10
15
nan
nan
2
12
16
nan
12
3
14
17
nan
13
4
24
18
12
14
5
25
18
13
55
6
nan
36
14
56
提前致谢!
假设 df1
和 df2
具有相同的索引和列,这是解决问题的一种方法:
用 limit=2
向前填充 df1
,然后使用 isna
创建一个布尔掩码。现在,使用这个布尔掩码 mask
df2
中的值,最后使用掩码数据帧 df2
填充 df1
中的 nan 值
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
我正在尝试使用限制为 2 和来自另一个数据帧的值来填充数据帧。但是,当 运行 以下代码 DF1.fillna(value=DF2,method='ffill',axis=0,limit=2)
时,出现此错误 ValueError: Cannot specify both 'value' and 'method'.
DF1 和 DF2 在形状、列和索引方面相同。
DF1
CompanyId | 1/1/2018 | 1/1/2019 | 1/1/2020 | 1/1/2021 |
---|---|---|---|---|
1 | 10 | 15 | nan | nan |
2 | 12 | 16 | nan | 12 |
3 | 14 | 17 | nan | 13 |
4 | nan | 18 | 12 | 14 |
5 | nan | 18 | 13 | nan |
6 | nan | nan | 14 | nan |
DF2
CompanyId | 1/1/2018 | 1/1/2019 | 1/1/2020 | 1/1/2021 |
---|---|---|---|---|
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 |
预期结果
CompanyId | 1/1/2018 | 1/1/2019 | 1/1/2020 | 1/1/2021 |
---|---|---|---|---|
1 | 10 | 15 | nan | nan |
2 | 12 | 16 | nan | 12 |
3 | 14 | 17 | nan | 13 |
4 | 24 | 18 | 12 | 14 |
5 | 25 | 18 | 13 | 55 |
6 | nan | 36 | 14 | 56 |
提前致谢!
假设 df1
和 df2
具有相同的索引和列,这是解决问题的一种方法:
用 limit=2
向前填充 df1
,然后使用 isna
创建一个布尔掩码。现在,使用这个布尔掩码 mask
df2
中的值,最后使用掩码数据帧 df2
df1
中的 nan 值
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