回答編集履歴
3
誤字修正
answer
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
以下のような操作でいけそうな気がします。
|
2
2
|
|
3
|
-
- まずは提示方法で補
|
3
|
+
- まずは提示方法で補間(内挿)する
|
4
|
-
- 補
|
4
|
+
- 補間前がnan かつ 補間後の前後の行の値のいずれかがnan である行を特定する
|
5
|
-
- 上記の行なら補
|
5
|
+
- 上記の行なら補間後の値を`nan`に戻す。
|
6
6
|
|
7
7
|
以下、単純例での行の特定例です。
|
8
8
|
```Python
|
@@ -24,7 +24,7 @@
|
|
24
24
|
2022-12-31 NaN
|
25
25
|
"""
|
26
26
|
|
27
|
-
# まずは補
|
27
|
+
# まずは補間する
|
28
28
|
df2 = df1.interpolate(limit=1, method="time", limit_area='inside', limit_direction="backward")
|
29
29
|
print(df2)
|
30
30
|
"""
|
@@ -38,7 +38,7 @@
|
|
38
38
|
2022-12-31 NaN
|
39
39
|
"""
|
40
40
|
|
41
|
-
# 補
|
41
|
+
# 補間前がnan かつ 補間後の前後の値のいずれかがnan
|
42
42
|
sr = np.isnan(df1[0]) & ( np.isnan(df2[0].shift(-1)) | np.isnan(df2[0].shift(1)) )
|
43
43
|
print(sr)
|
44
44
|
"""
|
2
修正
answer
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
以下のような操作でいけそうな気がします。
|
2
2
|
|
3
3
|
- まずは提示方法で補完(内挿)する
|
4
|
-
- 補完前がnan かつ 補完後の前後の値のいずれかがnan である行を特定する
|
4
|
+
- 補完前がnan かつ 補完後の前後の行の値のいずれかがnan である行を特定する
|
5
5
|
- 上記の行なら補完後の値を`nan`に戻す。
|
6
6
|
|
7
7
|
以下、単純例での行の特定例です。
|
1
コード修正
answer
CHANGED
@@ -24,6 +24,7 @@
|
|
24
24
|
2022-12-31 NaN
|
25
25
|
"""
|
26
26
|
|
27
|
+
# まずは補完する
|
27
28
|
df2 = df1.interpolate(limit=1, method="time", limit_area='inside', limit_direction="backward")
|
28
29
|
print(df2)
|
29
30
|
"""
|
@@ -49,6 +50,21 @@
|
|
49
50
|
2021-12-31 False
|
50
51
|
2022-12-31 True
|
51
52
|
"""
|
53
|
+
|
54
|
+
# 上記の条件を満たす行にnanをセット
|
55
|
+
df3 = df2.copy()
|
56
|
+
df3[0][sr] = nan
|
57
|
+
print(df3)
|
58
|
+
"""
|
59
|
+
0
|
60
|
+
2016-12-31 NaN
|
61
|
+
2017-12-31 NaN
|
62
|
+
2018-12-31 1.000000
|
63
|
+
2019-12-31 2.000000
|
64
|
+
2020-12-31 2.500684
|
65
|
+
2021-12-31 3.000000
|
66
|
+
2022-12-31 NaN
|
67
|
+
"""
|
52
68
|
```
|
53
69
|
|
54
70
|
上記の考えを元に提示例を変換した結果は以下になります。
|