以下の warning が出ていませんか?
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
pandas のインデックス操作の結果や関数の返り値は必要に応じて、元のデータフレームを参照する view、またはコピーになります。
今回、df001[df001["Sector Type"] == "SH"] の結果はコピーとなるため、元の Data Frame とは別の Data Frame となります。
そのため、そのコピーに対して、fillna() で値を変更しても元の Data Frame には反映されません。
以下のように fillna() した結果を同じ範囲に代入する形をとってください。
python
1import pandas as pd
2import numpy as np
3
4df = pd.DataFrame({"Col1": ["A", "A", "B", "B"], "Col2": [1, np.nan, 3, 4]})
5print(df)
6# Col1 Col2
7# 0 A 1.0
8# 1 A NaN
9# 2 B 3.0
10# 3 B 4.0
11
12# 作成されたコピーに対して、fillna() してるので、元の DataFrame である df は変更されない。
13df[df["Col1"] == "A"]["Col2"].fillna(1, inplace=True)
14
15print(df)
16# Col1 Col2
17# 0 A 1.0
18# 1 A NaN
19# 2 B 3.0
20# 3 B 4.0
21# 以下のように代入して置き換えればよい。
22df.loc[df["Col1"] == "A", "Col2"] = df.loc[df["Col1"] == "A", "Col2"].fillna(2)
23print(df)
24# Col1 Col2
25# 0 A 1.0
26# 1 A 2.0
27# 2 B 3.0
28# 3 B 4.0
質問者さんのコードの場合、以下のようになります。
python
1cond = df001["Sector Type"] == "SH", "施設内患者想定総数" # 置換範囲
2mean = df001.loc[cond].mean()
3df001.loc[cond] = df001.loc[cond].fillna(mean)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/11 04:15