目前我在熊猫方面遇到了一些麻烦...
我正在尝试定义以下功能:
def outlier(frame, col1, col2):
(frame.pipe(frame.loc[:,"lower"] = frame.groupby(by='col1')['col2'].transform(lower))
frame.pipe(frame.loc[:,"upper"] = frame.groupby(by='col1')['col2'].transform(upper))
frame.pipe(frame.loc[:,"outlier"] = (frame['col2'] < frame['lower'])|(frame['col2'] > frame['upper']))
)
不幸的是我得到了:SyntaxError:关键字不能是表达式
某些东西使我无法看到树木的木头,也无法找到我明显愚蠢的错误...
在以下代码中起作用:
这是函数"上"one_answers"下":
lower = lambda x: x.quantile(q=.25) - (1.5*(x.quantile(q=.75)-x.quantile(q=.25)))
upper = lambda x: x.quantile(q=.75) + (1.5*(x.quantile(q=.75)-x.quantile(q=.25)))
这是我的"意大利面条代码",将新列添加到数据框中:
acid81.loc[:,"lower"] = acid81.groupby(by='Ursprung')['Analysenwert'].transform(lower)
acid81.loc[:,"upper"] = acid81.groupby(by='Ursprung')['Analysenwert'].transform(upper)
acid81.loc[:,"outlier"] = (acid81['Analysenwert'] < acid81['lower']) | (acid81['Analysenwert'] > acid81['upper'])
供参考,在这里与OP在评论中进行讨论的答案:
问题是您使用了pipe
错误。pipe
的第一个参数应该是一个函数。有关更多信息,请参见官方文档:
参数:
func:功能
功能应用于NDFrame。args,尤尔格斯(Kwargs(被传给了弹性。或者,一个(可callable,data_keyword(元组,其中data_keyword是一个字符串,指示callable的关键字,期望ndframe。
args:位置论点传递到func。
kwargs:关键字参数的字典传递到func中。
您必须找到另一种创建数据框的方法。
最简单的解决方案就是将其遗漏。在这种情况下,您无需使用pipe
。只需坚持您的示例,然后将其放入outlier
功能中即可。然后返回结果框架。