gpt4 book ai didi

python - Pandas value_counts() for loop 因 lambda 而失败

转载 作者:太空宇宙 更新时间:2023-11-03 11:27:45 25 4
gpt4 key购买 nike

我有一些包含三个变量的数据框,我想为每个变量创建一个包含每个标签的相对计数的字典。

我很容易地创建了一个 forloop 来输出我想要的,但是我的 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

这个 for 循环产生了我想要的精确输出:

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}}

但是,由于某些未知原因,此 lambda 失败了:

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

最佳答案

除了没有解压缩 dict 调用之外,我实际上无法理解这里出了什么问题,这是实现您想要的目标的一种迂回方式:

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}}

看起来它是将函数对象绑定(bind)为列值而不是将其解包为字典,我在上面所做的是将 value_counts 作为列表返回,然后调用 再次应用 以解压单个元素列表。这会强制在初始 apply 调用中将 dict 解压缩到单个元素列表中:

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

关于python - Pandas value_counts() for loop 因 lambda 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30606880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com