条件为“布尔标签不能使用”的 panda 查询

Panda query with condition "boolean label can not be used"

提问人:Md Parvez Alam 提问时间:11/17/2023 更新时间:11/18/2023 访问量:21

问:

我有以下数据帧

    publisher_name   show_name  UniqueCount_promo_code UniqueValue_promo_code
0  publisher_name1  show_name1                       2              [code1, ]
1  publisher_name1  show_name2                       1                [code2]
2  publisher_name2  show_name3                       2         [code3, code4]

尝试对UniqueValue_promo_code进行查询

condition1 = lambda x: any(val == '' or val is None for val in x) and len(x) == 2
data = result.query(f"{condition1('UniqueValue_promo_code')} ")

gettig 错误

raise KeyError( KeyError: 'False: 布尔标签不能使用 没有布尔索引'

这里有什么问题 谢谢

Python 数据帧

评论


答:

0赞 Leo 11/18/2023 #1

问题在于 .query 只期望布尔表达式作为字符串。它不适用于 lambda 函数。你可以把它改写为:

import pandas as pd

data = pd.DataFrame({
    'publisher_name': ['publisher_name1', 'publisher_name1', 'publisher_name2'],
    'show_name': ['show_name1', 'show_name2', 'show_name3'],
    'UniqueCount_promo_code': [2, 1, 2],
    'UniqueValue_promo_code': [['code1', ''], ['code2'], ['code3', 'code4']]
})

condition = (data['UniqueValue_promo_code'].apply(lambda x: any(val == '' or val is None for val in x)) &
             (data['UniqueCount_promo_code'] == 2))

filtered_data = data[condition]
print(filtered_data)