対応する一部のグループの中央値に基づいて年齢の値を置き換えようとしています。 groupbyを使ってgrouped_medianというテーブルを作った。これは私のコードです:Apply関数がデータフレーム内の値を置き換えません
def fillAges(row, grouped_median):
return grouped_median.loc[row['Sex'], row['Class'], row['Title']]['Age']
df['Age'] = df.apply(lambda x : fillAges(x, grouped_median) if np.isnan(x['Age']) else x['Age'], axis=1)
df
私はこの部分のみを印刷する場合:
print(df.apply(lambda x : fillAges(x, grouped_median) if np.isnan(x['Age']) else x['Age'], axis=1))
値が正しいですが、私は、DFを見たら、その後、NaN値が交換されていません。私はどんな助けにも感謝します。ありがとうございました!
編集:Nathanielが言ったように、このコードは正常に動作します。実際、dfは列車とテストの両方のデータセットから連結された大きなデータフレームであり、列車または試験のフラグ列が1つ追加されています。それで、これは私がやっていることです:
df[df['flag']=='train']['Age'] = df[df['flag']=='train'].apply(lambda x : fillAges(x, grouped_median) if np.isnan(x['Age']) else x['Age'], axis=1)
それは動作しません。これは私にこの警告を与えるだろうが、私はそれが実際に何もしていないという意味ではない警告だと思った! "値はDataFrameからスライスのコピーに設定しようとしています。代わりに.loc [row_indexer、col_indexer] = valueを使用してみてくださいドキュメントの警告を参照してください:pandas.pydata.org/pandas-docs/stable/...
私が行うために必要なものをすべて
は左から[DF [「フラグ」] ==「電車」]一部を除去する。私はまだこのアプローチは働いていなかった理由はわからないでした。誰もが洞察力を持っているなら、それを知っていただければ幸いです。ありがとうございます。
imputationのために 'fillna()'を使うことについてのこの記事をチェックしてください(つまり、欠けているデータに中央値を書き込む):https://stackoverflow.com/questions/32617811/imputation-of-missing-values-for-categories-in -pandas – NickBraunagel
ありがとうございました!しかし、これは私のためには機能しません。特定のグループの中央値を使用したい。私はテーブルを作りました。私はapply関数を使います。メディアンは実際には私の問題ではありません。私の問題は、データフレーム内でデータが置き換えられない理由です。 – user3709260