したがって、2つのデータフレームがあります。1つは多くの列を持つ完全なデータセットであり、各行は観測値です。
2番目のデータフレームは最初のデータフレームのサブセットですが、「county」と呼ばれる変数によって列内の欠落している値の%をカウントします。
これまでのところ、意図した結果を提供し、列全体に欠落している%を提供する関数があります。
def missing_count(df, var):
percent_missing= df[var].isnull().sum() * 100 / len(df)
return round(percent_missing,2)
しかし、私がやりたいのは、それを郡に固有のものにすることです。例-ケース番号は、郡yで12%欠落しており、郡xで15%欠落しています。コードは現在、データフレーム全体で欠落しているケース番号の数を示しています。データフレーム全体に66の一意の郡があると仮定して、66の個別の欠落カウントを探しています。
groupbyを使用して結果を取得しようとしていますが、機能していません。
df2['casenumber'] = df.groupby(by='county').apply(missing_count(df, 'casenumber'))
しかし、これは機能せず、「TypeError: 'numpy.float64'オブジェクトは呼び出せません」というメッセージが表示されます。
私は何が間違っているのですか?
系列またはキーワード変数のいずれかを取るように関数を書き直す必要がありますval
。
# series:
def missing_count(s, var):
percent_missing= s.isnull().sum() * 100 / s
return round(percent_missing,2)
df.groupby('county')['casenumber'].apply(missing_count)
# or keyword `val`
# careful for `KeyError`
def missing_count(d, var=None)
percent_missing= df[var].isnull().sum() * 100 / len(df)
return round(percent_missing,2)
df.groupby('county').apply(missing_count, var='casenumber')
そうは言っても、コードは次のように書くことができます。これはよりパフォーマンスが高いはずです。
df['case_number'].isnull().groupby(df['county']).mean()
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加