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

回答編集履歴

2

2021/06/02 04:08

投稿

kirara0048
kirara0048

スコア1399

answer CHANGED
@@ -69,13 +69,30 @@
69
69
  Name: 市区町村, dtype: float64
70
70
  ```
71
71
 
72
+ このようにして得たシリーズをもとの`df`に再び割り当てることで、求めたい結果が得られます。
73
+
72
74
  ---
73
75
 
74
- このようにして得たシリーズをもとの`df`に再び割り当てることで、以下のような結果が得られます。
76
+ 以下に今回操作をとめます。
75
77
 
76
78
  ```python
79
+ In [17]: pref = ["東京", "東京", "東京", "埼玉", "千葉", "神奈川"]
80
+ ...: value = ["渋谷", "新宿", "池袋", "大宮", "新浦安", "横浜"]
81
+ ...: df = pd.DataFrame({'都道府県':pref, '市区町村': value})
82
+ ...: dic = {"渋谷":100, "新宿":90, "大宮":50, "新浦安":45, "横浜":80}
83
+ ...:
84
+ ...: df
85
+ Out[17]:
86
+ 都道府県 市区町村
87
+ 0 東京 渋谷
88
+ 1 東京 新宿
89
+ 2 東京 池袋
90
+ 3 埼玉 大宮
91
+ 4 千葉 新浦安
92
+ 5 神奈川 横浜
93
+
77
- In [107]: df.assign(市区町村=df['市区町村'].map(dic).groupby(df['都道府県']).transform(lambda s: s.fillna(s.mean())))
94
+ In [18]: df.assign(市区町村=df['市区町村'].map(dic).groupby(df['都道府県']).transform(lambda s: s.fillna(s.mean())))
78
- Out[107]:
95
+ Out[18]:
79
96
  都道府県 市区町村
80
97
  0 東京 100.0
81
98
  1 東京 90.0

1

2021/06/02 04:08

投稿

kirara0048
kirara0048

スコア1399

answer CHANGED
@@ -38,9 +38,9 @@
38
38
 
39
39
  ---
40
40
 
41
- つづいて、値が`NaN`となっているデータを特定の値で上書きする場合には、`.fillna()`メソッドが利用できます。シリーズの平均値で欠損値穴埋めする場合は、`Series.fillna(Series.mean))`のようにします。
41
+ つづいて、値が`NaN`となっているデータを特定の値で上書きする場合には、`.fillna()`メソッドが利用できます。`.map()`メソッドを用いたことがここで生きてきます。`NaN`に変換したことで、わざわざ`'池袋'`をキーにした辞書ライクなものを作成する必要がなくなり、シリーズの標準のメソッド活用することができます。
42
42
 
43
- 以下はこの動作の例です。
43
+ シリーズの平均値で欠損値を穴埋めする場合は、`Series.fillna(Series.mean))`のようにします。以下はこの動作の例です。
44
44
 
45
45
  ```python
46
46
  In [14]: s = pd.Series([1, 2, None, 3, 4])