我有一个pandas数据帧,我想按组汇总,使用一个解析为布尔值的自定义函数.

考虑以下数据.df描述了4个人,每个人都喜欢水果.

import numpy as np
import pandas as pd

df = pd.DataFrame({
    "name": ["danny", "danny", "danny", "monica", "monica", "monica", "fred", "fred", "sam", "sam"],
    "fruit": ["apricot", "apple", "orange", "apricot", "banana", "watermelon", "apple", "apricot", "apricot", "peach"]
})

print(df)
##      name       fruit
## 0   danny     apricot
## 1   danny       apple
## 2   danny      orange
## 3  monica     apricot
## 4  monica      banana
## 5  monica  watermelon
## 6    fred       apple
## 7    fred    apricot
## 8     sam    apricot
## 9     sam       peach

我想总结一下这张表,找出喜欢102 apricot and apple的人.换句话说,我的desired output是下表

# desired output
##      name     fruit
## 0   danny     True
## 1  monica     False
## 2    fred     True
## 3     sam     False

My attempt

我首先定义了一个函数,用于搜索目标列表中是否存在字符串:

def is_needle_in_haystack(needle, haystack):
  return all(x in haystack for x in needle)

is_needle_in_haystack()个有效示例:

is_needle_in_haystack(["zebra", "lion"], ["whale", "lion", "dog"])
# False

is_needle_in_haystack(["rabbit", "cat"], ["hamster", "cat", "monkey", "rabbit"])
# True

现在我使用is_needle_in_haystack(),将dfname分组:

target_fruits = ["apricot", "apple"]

df.groupby(df["name"]).agg({"fruit": lambda x: is_needle_in_haystack(target_fruits, x)})

那么为什么我会得到下面的输出,这显然不是预期的?

##    fruit
## name         
## danny   False
## fred    False
## monica  False
## sam     False

我的代码做错了什么?

推荐答案

问题是haystack是一个系列,在.agg中调用时,更改为:

def is_needle_in_haystack(needle, haystack):
    return all(x in set(haystack) for x in needle)


target_fruits = ["apricot", "apple"]
res = df.groupby(df["name"]).agg({"fruit": lambda x: is_needle_in_haystack(target_fruits, x)})
print(res)

Output

        fruit
name
danny    True
fred     True
monica  False
sam     False

序列的in运算符返回False,例如:

"hamster" in pd.Series(["hamster", "cat", "monkey", "rabbit"])
# False

Python相关问答推荐

大Pandas 胚胎中产生组合

即使在可见的情况下也不相互作用

Python daskValue错误:无法识别的区块管理器dask -必须是以下之一:[]

仿制药的类型铸造

如何避免Chained when/then分配中的Mypy不兼容类型警告?

按列分区,按另一列排序

numpy卷积与有效

在单个对象中解析多个Python数据帧

如何在Python中使用另一个数据框更改列值(列表)

Pandas Data Wrangling/Dataframe Assignment

OpenCV轮廓.很难找到给定图像的所需轮廓

如何使用正则表达式修改toml文件中指定字段中的参数值

如何求相邻对序列中元素 Select 的最小代价

如何强制向量中的特定元素在Gekko中处于优化解决方案中

Regex用于匹配Python中逗号分隔的AWS区域

如何在Python中从html页面中提取html链接?

使用美汤对维基百科表格进行网络刮擦未返回任何内容

Django REST框架+Django Channel->;[Errno 111]连接调用失败(';127.0.0.1';,6379)

IpyWidget Select 框未打开

使用OpenPYXL切换图表上的行/列