У меня есть некоторый dataframe из трех переменных, и я хочу создать словарь относительного подсчета каждой метки для каждой переменной.Pandas value_counts() for loop failed as lambda
Я легко создал шлюз, который выводит именно то, что я хочу, однако моя лямбда производит более жёсткие результаты.
Вот данные:
In [3]:
import pandas as 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
Этот цикл производит точный результат я хочу:
In [4]:
forloop = {}
for 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}}
Однако это лямбда терпит неудачу по неизвестной причине:
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 at 0x10...
category2 <built-in method values of dict object at 0x10...
category3 <built-in method values of dict object at 0x10...
dtype: object