python - Pandas value_counts() for loop fails as lambda -
i have dataframe of 3 variables , want create dictionary of relative count of each label each variable.
i created forloop outputs want, lambda produces wierd results.
here data:
in [3]: import pandas pd raw_data = { 'category1': ['red', 'red', 'red', 'green'], 'category2': ['plane', 'plane', 'plane', 'car'], 'category3': ['orange', 'orange', 'orange', 'banana'], } df = pd.dataframe(raw_data) df out[3]: category1 category2 category3 0 red plane orange 1 red plane orange 2 red plane orange 3 green car banana
this loop produces exact output want:
in [4]: forloop = {} column in df: forloop[column] = df[column].value_counts(normalize=true).to_dict() forloop out[4]: {'category1': {'green': 0.25, 'red': 0.75}, 'category2': {'car': 0.25, 'plane': 0.75}, 'category3': {'banana': 0.25, 'orange': 0.75}}
however, lambda fails unknown reason:
in [6]: ratio = lambda x: x.value_counts(normalize=true).to_dict() output_lambda = df.apply(ratio) output_lambda out[6]: category1 <built-in method values of dict object @ 0x10... category2 <built-in method values of dict object @ 0x10... category3 <built-in method values of dict object @ 0x10... dtype: object
i can't understand going wrong here other it's not unpacking dict
call, here round-about way achieve want:
in [86]: ratio = lambda x: x.value_counts(normalize=true) output_lambda = df.apply(lambda x: [x.value_counts().to_dict()]).apply(lambda x: x[0]).to_dict() output_lambda out[86]: {'category1': {'green': 1, 'red': 3}, 'category2': {'car': 1, 'plane': 3}, 'category3': {'banana': 1, 'orange': 3}}
it looks it's binding function object column value rather unpacking dict, i'm doing above return value_counts
list , call apply
again unpack single element list. forces dict unpacked single element list in initial apply
call:
in [87]: output_lambda = df.apply(lambda x: [x.value_counts().to_dict()]) output_lambda out[87]: category1 [{'green': 1, 'red': 3}] category2 [{'plane': 3, 'car': 1}] category3 [{'banana': 1, 'orange': 3}] dtype: object
Comments
Post a Comment