回答編集履歴
2
test
CHANGED
@@ -140,19 +140,53 @@
|
|
140
140
|
|
141
141
|
|
142
142
|
|
143
|
+
このようにして得たシリーズをもとの`df`に再び割り当てることで、求めたい結果が得られます。
|
144
|
+
|
145
|
+
|
146
|
+
|
143
147
|
---
|
144
148
|
|
145
149
|
|
146
150
|
|
147
|
-
|
151
|
+
以下に今回の操作をまとめます。
|
148
|
-
|
149
|
-
|
150
|
-
|
152
|
+
|
153
|
+
|
154
|
+
|
151
|
-
```python
|
155
|
+
```python
|
156
|
+
|
152
|
-
|
157
|
+
In [17]: pref = ["東京", "東京", "東京", "埼玉", "千葉", "神奈川"]
|
158
|
+
|
159
|
+
...: value = ["渋谷", "新宿", "池袋", "大宮", "新浦安", "横浜"]
|
160
|
+
|
161
|
+
...: df = pd.DataFrame({'都道府県':pref, '市区町村': value})
|
162
|
+
|
163
|
+
...: dic = {"渋谷":100, "新宿":90, "大宮":50, "新浦安":45, "横浜":80}
|
164
|
+
|
165
|
+
...:
|
166
|
+
|
167
|
+
...: df
|
168
|
+
|
169
|
+
Out[17]:
|
170
|
+
|
171
|
+
都道府県 市区町村
|
172
|
+
|
173
|
+
0 東京 渋谷
|
174
|
+
|
175
|
+
1 東京 新宿
|
176
|
+
|
177
|
+
2 東京 池袋
|
178
|
+
|
179
|
+
3 埼玉 大宮
|
180
|
+
|
181
|
+
4 千葉 新浦安
|
182
|
+
|
183
|
+
5 神奈川 横浜
|
184
|
+
|
185
|
+
|
186
|
+
|
153
|
-
In [1
|
187
|
+
In [18]: df.assign(市区町村=df['市区町村'].map(dic).groupby(df['都道府県']).transform(lambda s: s.fillna(s.mean())))
|
154
|
-
|
188
|
+
|
155
|
-
Out[1
|
189
|
+
Out[18]:
|
156
190
|
|
157
191
|
都道府県 市区町村
|
158
192
|
|
1
test
CHANGED
@@ -78,11 +78,11 @@
|
|
78
78
|
|
79
79
|
|
80
80
|
|
81
|
-
つづいて、値が`NaN`となっているデータを特定の値で上書きする場合には、`.fillna()`メソッドが利用できます。シリーズの
|
81
|
+
つづいて、値が`NaN`となっているデータを特定の値で上書きする場合には、`.fillna()`メソッドが利用できます。`.map()`メソッドを用いたことがここで生きてきます。`NaN`に変換したことで、わざわざ`'池袋'`をキーにした辞書ライクなものを作成する必要がなくなり、シリーズの標準のメソッドを活用することができます。
|
82
82
|
|
83
83
|
|
84
84
|
|
85
|
-
以下はこの動作の例です。
|
85
|
+
シリーズの平均値で欠損値を穴埋めする場合は、`Series.fillna(Series.mean))`のようにします。以下はこの動作の例です。
|
86
86
|
|
87
87
|
|
88
88
|
|