python-3.x - 在 groupby.agg、pandas 中使用 lambda 函数
问题描述
我有一个这样的数据框:
pd.DataFrame({
'animal': ['dog', 'dog', 'cat', 'dog', 'cat'],
'color': ['brown', 'black', 'white', 'black', 'black']})
我正在尝试编写这样的 groupby 函数:
groupby('animal').agg(
proportion_of_black=('color', lambda x: 1 if x == 'black' else 0)).reset_index()
它返回以下错误消息:
ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
我的代码哪里出错了?
解决方案
由于您的问题要求比例而不是计数,您应该这样做:
df.groupby(['animal']).agg(
proportion=('color', lambda x: x.eq('black').mean())).reset_index()
animal proportion
0 cat 0.500000
1 dog 0.666667
推荐阅读
- dns - 将 mailchimp dkim 添加到现有的 dkim 记录
- angular - 具有 REST 服务的 Angular 资源:Web 应用程序和电子
- javascript - How do I make my submit button disappear onclick?
- ruby-on-rails - 使用自定义地址格式的 Rails geocoder gem 地理编码
- database - 加载整个数据库表然后在内存中过滤,还是只加载过滤后的条目?
- amazon-web-services - Docker 推送到 AWS ECR 问题
- python - 将公式作为字符串转换为 Python 中的函数
- ansible - 在 Ansible 中,如果系统将在更新该行之前重新启动,我如何重复获取文件直到存在该行?
- regex - 用破折号替换连字符
- javascript - 如何在javascript中获得不同的id值?