如何将变量值作为数据帧列传递

2024-09-26 22:50:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我只需要从数据帧中获取某些行。我有一个关于酒店的数据框,结构是这样的

         pool      gym         AC     Breakfast
hotel1    1          0         1          0    
hotel2    0          0         0          1
hotel3    0          1         1          0  
....

现在,用户可以选择他们有哪些要求,例如,一个有游泳池和空调的酒店。我想删除与用户给定的任何条件都不匹配的行。因此,在这个示例中,hotel2将从数据帧中删除。你知道吗

我尝试循环使用用户给定的条件,并创建一个条件,该条件将只保留与至少一个给定属性匹配的行。你知道吗

如果我对选项进行了硬编码,就像这样。你知道吗

hotels = hotels([hotels.pool == 1) | (hotels.AC == 1)]

但是,由于用户给定的条件一直在更改,因此我构建了一个循环来生成相应的条件。像这样:

for key, value in usercriteria.items():
    criteria += '(hotels[\'' + key + '\'] == 1) | '

# remove last OR operator
criteria = criteria[:-2]

但是,我不知道如何将变量值传递给dataframe以替换所需的条件,从而只给出正确的行。我尝试了以下格式:

hotels = hotels[criteria]

对于第一个I get key error:KeyError:“(hotels['pool']==1)|(hotels['AC']==1)”

但是,如果我复制/粘贴错误消息中的键并用它重新放置条件,它似乎可以工作。你知道吗

我应该如何传递该变量以便正确放置它?单引号有问题吗?你知道吗


Tags: 数据key用户条件酒店结构acgym
1条回答
网友
1楼 · 发布于 2024-09-26 22:50:28

要将表达式计算为字符串,请使用^{}

import pandas as pd

usercriteria = {"pool": 1, "AC":1}

criteria = "hotels["
for key, value in usercriteria.items():
    criteria += "(hotels['{}']=={})|".format(key, value)
criteria = criteria[:-1] + "]"

>>> print(pd.eval(criteria))
        pool  gym  AC  Breakfast
hotel                           
hotel1     1    0   1          0
hotel3     0    1   1          0

另外,正如@GeorgPoe所建议的,您可以使用DataFrame方法^{}

usercriteria = {"pool": 1, "AC":1}

criteria = ""
for key, value in usercriteria.items():
    criteria += "({}=={})|".format(key, value)
criteria = criteria[:-1]

>>> print(hotels.query(criteria))
        pool  gym  AC  Breakfast
hotel                           
hotel1     1    0   1          0
hotel3     0    1   1          0

相关问题 更多 >

    热门问题