python - 使用自定义函数按组汇总 pandas DataFrame 会导致错误的输出

标签 python pandas dataframe

我有一个 pandas DataFrame,我想使用解析为 bool 值的自定义函数按组对其进行汇总。

考虑以下数据。 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

我想总结此表,以找到喜欢两者 苹果的人。换句话说,我的所需输出如下表

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

我的尝试

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

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

现在我在按名称df进行分组时使用了is_needle_in_haystack():

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

我的代码做错了什么?

最佳答案

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

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)

输出

        fruit
name
danny    True
fred     True
monica  False
sam     False

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

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

关于python - 使用自定义函数按组汇总 pandas DataFrame 会导致错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73094512/

相关文章:

python - Pandas 数据框 : Subtract columns with string datatype

python - 如何在未修复空格/s分隔的情况下读取pandas中的文件?

python - 采取 Pandas (python)中每隔一列的行均值

python - Pandas 系列 -> 数据框。从行创建列并用零填充不匹配项

python - 如何在 Salt 中获取状态和上次运行 `state.highstate` 的日志?

python - 读取Excel表格时出现异常

python - 列值到单字符串观察

python - 确保键的笛卡尔积出现在 Pandas 表中

python - GAE - urlfetch 多部分帖子不适用于大文件

python - 使用 csv 阅读器上传时出错 :