回答編集履歴
2
answer
CHANGED
|
@@ -69,13 +69,30 @@
|
|
|
69
69
|
Name: 市区町村, dtype: float64
|
|
70
70
|
```
|
|
71
71
|
|
|
72
|
+
このようにして得たシリーズをもとの`df`に再び割り当てることで、求めたい結果が得られます。
|
|
73
|
+
|
|
72
74
|
---
|
|
73
75
|
|
|
74
|
-
|
|
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 [
|
|
94
|
+
In [18]: df.assign(市区町村=df['市区町村'].map(dic).groupby(df['都道府県']).transform(lambda s: s.fillna(s.mean())))
|
|
78
|
-
Out[
|
|
95
|
+
Out[18]:
|
|
79
96
|
都道府県 市区町村
|
|
80
97
|
0 東京 100.0
|
|
81
98
|
1 東京 90.0
|
1
answer
CHANGED
|
@@ -38,9 +38,9 @@
|
|
|
38
38
|
|
|
39
39
|
---
|
|
40
40
|
|
|
41
|
-
つづいて、値が`NaN`となっているデータを特定の値で上書きする場合には、`.fillna()`メソッドが利用できます。シリーズの
|
|
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])
|