欠損が多いデータフレームから,横に3連続以上要素(データ)が存在している部分だけ残すデータフレームを作成したいのですが,上手く該当部分だけ抽出することが出来ず,困っています.
ご教授いただければ幸いです.
具体的なやりたいことは,
df1があったとき
|A|B|C|D|E|F|G
|:--|:--:|--:|
|NaN|4|2|3|NaN|NaN|6
|NaN|NaN|2|5|4|5|NaN
|NaN|1|2|NaN|4|5|NaN
|1|1|2|NaN|4|5|6
1行目B~D列のように要素が3連続以上存在する場合はその部分だけ抽出して,要素が存在しても3連続未満の場合はNaNにしたいです.
抽出した結果できるデータフレームは下の表のようになっているのが理想です.
|A|B|C|D|E|F|G
|:--|:--:|--:|
|NaN|4|2|3|NaN|NaN|NaN
|NaN|Nan|2|5|4|5|NaN
|NaN|NaN|NaN|NaN|NaN|NaN|NaN
|1|1|2|NaN|4|5|6
現在,書いたコードと結果は下記のとおりです.
3行目E,F列をNaNにしたいのですが,どうしたら思い通りに出力されるのかわかりません.
python3.6
1import pandas as pd 2 3dff1=df1.copy() 4 5for n in range(5): 6 if n == 0: 7 dff1.loc[dff1.iloc[:,n:n+3].isnull().any(axis=1),collist[n:n+3]]="NaN" 8 9 else: 10 dff2 = df1.copy() 11 dff2.loc[dff2.iloc[:,n:n+3].isnull().any(axis=1),collist[n:n+3]]="NaN" 12 dff1.iloc[:,n:n+3]=dff1.replace("NaN",dff2.iloc[:,n:n+3])
結果:
|A|B|C|D|E|F|G
|:--|:--:|--:|
|NaN|4|2|3|NaN|NaN|NaN
|NaN|Nan|2|5|4|5|NaN
|NaN|NaN|NaN|NaN|4|5|NaN
|1|1|2|NaN|4|5|6
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/11/27 16:38