実現したいこと
- NaN(欠損値)を特定の値で穴埋めをしたい
- 特定の値の条件はSexとSportで絞り込んだAgeの平均値
例:
ID3のNaNには、Sex=F,Sport=Swinの平均Age=25が補完される
ID6のNaNには、Sex=F,Sport=Runの平均Age=35が補完される
ID9のNaNには、Sex=M,Sport=Swimの平均Age=35が補完される
- For文にて穴埋めを繰り返したい。
以下、pandas.daftaframeです。
ID | Sex | Age | Sport |
---|---|---|---|
1 | F | 20 | Swim |
2 | F | 30 | Swim |
3 | F | NaN | Swim |
4 | F | 30 | Run |
5 | F | 40 | Run |
6 | F | NaN | Run |
7 | M | 40 | Swim |
8 | M | 50 | Swim |
9 | M | NaN | Swim |
10 | M | 50 | Run |
11 | M | 60 | Run |
12 | M | NaN | Run |
実現に向けて考えたこと
**STEP01. **
SexとSportの値を指定して、列(Age)を抽出
Python
1df[(df['Sport']=='Swim')&(df['Sex']=='F')]["Age"] 2
**STEP02. **
fillna()メソッドにて、平均値(mean())を代入
python
1df.fillna(df[(df['Sport']=='Judo')&(df['Sex']=='M')]["Age"].mean())
**STEP03. **
1と2を、SportとSexの全ての組み合わせに対して、for文で回す
python
1 2sportlists = df['Sport'].unique().tolist() 3 4for i in sportlists: 5df[(df['Sport']==i)&(df['Sex']=='M')]["Age"].fillna(df[(df['Sport']==i)&(df['Sex']=='M')]["Age"].mean())
解決したいこと
Sportの要素は、実際は50個程度あるため、For文或いは何らかの手法で繰り返し処理をしたいのですが、
fillna()が反映さない(実行しても値が変わらない)のです。
どなた様か、このようなケースにおいて、どのようなアプローチがシンプルで効率的なものか教えて頂けますでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/03 12:20