gpt4 book ai didi

python - 在查询 pandas dataframe 列值时使用类似 MySQL 的条件

转载 作者:行者123 更新时间:2023-11-28 23:11:11 26 4
gpt4 key购买 nike

我正在尝试选择标签包含特定字符串的 pandas 数据框中的所有项目:

df.query('@label.keys() 中的 ITEM 和@label[ITEM] 中的“H2O”')

label 是将项目映射到其文本标签的字典。

但是当我这样做时,我得到:

TypeError: 'Series' objects are mutable, thus they cannot be hashed

我知道解决这个问题的一种方法是创建另一个字典,其中包含标签中包含“H2O”的项目,我们称之为 label_H2O,然后查询可以变为:

df.query('@label_H2O.keys() 中的项目')

但是第一种方法更方便,因为我可以在一个查询中完成所有操作。

是否可以像我在第一种方法中尝试的那样在单个查询中执行此操作?另外,如果有办法,它会比第二种方法慢吗?

我不确定表达式是如何求值的,我能想到两种可能性:

  1. 遍历整个数据框并获取所有唯一项 -> 过滤器它们基于附加条件 -> 将它们存储在一个集合中 ->遍历数据框中的每一行并检查项目是否在此集合中并相应地选择该行
  2. 遍历每一行并评估条件

在情况 1 中,两个查询似乎应该具有相似的性能。在情况 2 中,第二个查询效率更高,尤其是当我们有很多重复项时。

df 标题:

   SUBJECT_ID  ITEM
0 1 3
1 2 5
2 1 5
3 1 2
4 1 2

标签:

{
1: 'Coffee',
2: 'Apple Juice',
3: 'Soda',
4: 'Tea',
5: 'Sparkling H2O'
}

最佳答案

我不确定你的问题是为了获得结果,还是你已经接受了使用 query 的想法并且只是好奇如何让它工作。

如果您正在寻找一种方法来从 df 中获取具有与其中包含“H2O”的标签相对应的键的行:

df[df['item'].isin([k for k,v in label.items() if 'H2O' in v])]

关于python - 在查询 pandas dataframe 列值时使用类似 MySQL 的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45948263/

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