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

Popular posts from this blog

python - TypeError: start must be a integer -

c# - DevExpress RepositoryItemComboBox BackColor property ignored -

django - Creating multiple model instances in DRF3 -