我正在尝试创建一个函数,该函数将使用查询方法根据多个条件筛选数据框,并使用适用的值创建一个新系列。
下面是我正在使用的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']
但我得到一个错误,说周未定义。
2条答案
按热度按时间0vvn1miw1#
基于
f strings
的可能解决方案:8cdiaqws2#
或者,您可以使用**@**定义变数: