【发布时间】:2017-08-29 21:01:40
【问题描述】:
我正在尝试选择标签包含某个字符串的 pandas 数据框中的所有项目:
df.query(' ITEM in @label.keys() and "H2O" in @label[ITEM]')
label 是将项目映射到其文本标签的字典。
但是当我这样做时,我得到:
TypeError: 'Series' 对象是可变的,因此它们不能被散列
我知道解决此问题的一种方法是创建另一个字典,其中包含标签中包含“H2O”的项目,我们称之为 label_H2O,然后查询可以变为:
df.query(' ITEM in @label_H2O.keys()')
但是第一种方法更方便,因为我可以在一个查询中完成所有操作。
是否可以像我在第一种方法中尝试的那样在单个查询中执行此操作?另外,如果有办法,它会比第二种方法慢吗?
我不确定表达式是如何计算的,我能想到两种可能性:
- 遍历整个数据框并获取所有唯一项 -> 过滤器 它们基于附加条件 -> 将它们存储在一个集合中 -> 遍历数据框中的每一行并检查项目是否在此集合中并相应地选择行
- 遍历每一行并评估条件
在情况 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'
}
【问题讨论】:
-
你能发布你的 df.head() 吗?
-
@Ibrahim,你能否提供一个代表
label的样本数据集? -
@MaxU 我更新了问题以包含示例字典
-
@Vaishali 添加了示例标题并更改了值以进一步说明案例