質問するログイン新規登録

回答編集履歴

2

追記

2020/04/02 00:11

投稿

meg_
meg_

スコア11027

answer CHANGED
@@ -1,3 +1,36 @@
1
+ fillna(method='bfill')とfillna(method='ffill')を組み合わせて出来そうです。
2
+ とりあえす質問のケースでは出来ました。他のケースは別途検証してください。
3
+
4
+ ```Python
5
+ import pandas as pd
6
+ import io
7
+ import numpy as np
8
+
9
+ text = """
10
+ 1,2,3,4,5,6
11
+ A,1,1,1,1,1,
12
+ B,1,,1,1,1,1
13
+ C,1,,,,1,1
14
+ D,1,,,1,,
15
+ """
16
+
17
+ df = pd.read_csv(io.StringIO(text))
18
+ df = df.T
19
+ df2 = df.copy().fillna(method='bfill')
20
+ df3 = df.copy().fillna(method='ffill')
21
+ df_result = pd.DataFrame(df2.values * df3.values, index=df.index, columns=df.columns)
22
+ df_result.fillna(0, inplace=True)
23
+ df_result = df_result.T
24
+ df_result = df_result.astype('int')
25
+ print(df_result)
26
+ # 1 2 3 4 5 6
27
+ #A 1 1 1 1 1 0
28
+ #B 1 1 1 1 1 1
29
+ #C 1 1 1 1 1 1
30
+ #D 1 1 1 1 0 0
31
+ ```
32
+ ---
33
+
1
34
  ※下記は1で挟まれているという条件が抜けていました。
2
35
 
3
36
  処理通りやるなら、iterrors()などでデータフレームの行をループしてその行の値を1個ずつチェックしてく感じでしょうか?データが多いと処理が遅いとは思いますが。

1

追記

2020/04/02 00:11

投稿

meg_
meg_

スコア11027

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