回答編集履歴

2

追記

2020/04/02 00:11

投稿

meg_
meg_

スコア10760

test CHANGED
@@ -1,3 +1,69 @@
1
+ fillna(method='bfill')とfillna(method='ffill')を組み合わせて出来そうです。
2
+
3
+ とりあえす質問のケースでは出来ました。他のケースは別途検証してください。
4
+
5
+
6
+
7
+ ```Python
8
+
9
+ import pandas as pd
10
+
11
+ import io
12
+
13
+ import numpy as np
14
+
15
+
16
+
17
+ text = """
18
+
19
+ 1,2,3,4,5,6
20
+
21
+ A,1,1,1,1,1,
22
+
23
+ B,1,,1,1,1,1
24
+
25
+ C,1,,,,1,1
26
+
27
+ D,1,,,1,,
28
+
29
+ """
30
+
31
+
32
+
33
+ df = pd.read_csv(io.StringIO(text))
34
+
35
+ df = df.T
36
+
37
+ df2 = df.copy().fillna(method='bfill')
38
+
39
+ df3 = df.copy().fillna(method='ffill')
40
+
41
+ df_result = pd.DataFrame(df2.values * df3.values, index=df.index, columns=df.columns)
42
+
43
+ df_result.fillna(0, inplace=True)
44
+
45
+ df_result = df_result.T
46
+
47
+ df_result = df_result.astype('int')
48
+
49
+ print(df_result)
50
+
51
+ # 1 2 3 4 5 6
52
+
53
+ #A 1 1 1 1 1 0
54
+
55
+ #B 1 1 1 1 1 1
56
+
57
+ #C 1 1 1 1 1 1
58
+
59
+ #D 1 1 1 1 0 0
60
+
61
+ ```
62
+
63
+ ---
64
+
65
+
66
+
1
67
  ※下記は1で挟まれているという条件が抜けていました。
2
68
 
3
69
 

1

追記

2020/04/02 00:11

投稿

meg_
meg_

スコア10760

test CHANGED
@@ -1 +1,13 @@
1
+ ※下記は1で挟まれているという条件が抜けていました。
2
+
3
+
4
+
5
+ 処理通りやるなら、iterrors()などでデータフレームの行をループしてその行の値を1個ずつチェックしてく感じでしょうか?データが多いと処理が遅いとは思いますが。
6
+
7
+
8
+
9
+ ---
10
+
11
+
12
+
1
13
  検証はしていませんが、データフレームを転置してdf.fillna(method='bfill')で穴埋めというのはどうでしょうか?