pandas 如何在函数中使用df.query方法?

zysjyyx4  于 2022-12-02  发布在  其他
关注(0)|答案(2)|浏览(164)

我正在尝试创建一个函数,该函数将使用查询方法根据多个条件筛选数据框,并使用适用的值创建一个新系列。
下面是我正在使用的df的一个示例:
| 周数|治疗方法|数值|
| - -|- -|- -|
| 第0页|ABC公司|100个|
| 一个|ABC公司|一百五十个|
| 2个|ABC公司|一百四十九|
| 第0页|XYZ坐标系|三百五十|
| 一个|XYZ坐标系|五百个|
| 2个|XYZ坐标系|六百|
| 第0页|ABC公司|一百零一|
| 一个|ABC公司|一百三十|
| 2个|ABC公司|一百四十七|
我已经能够使用如下.query方法成功过滤给定“周”和“治疗”的数据:

test = df.query('Week == 1 & Treatment.str.startswith("A").values')['value']

我只对提取“values”列感兴趣。
这很棒,但我不想在df中复制和粘贴每一个'week'和'treatment'的这行代码。因此,我想创建一个函数,让我将所需的周和treatment(或treatment的第一个字母)作为参数,并让它返回一个包含所需值的对象,以供进一步分析。
以下是我目前所掌握的情况:

def sorter(df,week):
    return df.query('Week == 0 & Treatment.str.startswith("A").values')['value']

我知道,我的函数不会将值作为对象返回。我将在这方面努力。我遇到的困难是,当查询方法中周被写为字符串的一部分时,如何使函数的参数之一为周(如'0')。
我试过这个:

def sorter(df,week):
    return df.query('Week == week & Treatment.str.startswith("A").values')['value']

但我得到一个错误,说周未定义。

0vvn1miw

0vvn1miw1#

基于f strings的可能解决方案:

def sorter(df,week):
    return df.query(f'Week == {week} & Treatment.str.startswith("A").values')['Value']
8cdiaqws

8cdiaqws2#

或者,您可以使用**@**定义变数:

def sorter(df,week):
    return df.query('Week == @week & Treatment.str.startswith("A").values')['value']

相关问题