我是jupyter笔记本电脑的新手,想知道如何在函数中获取列的分位数:
DataFrame:
num_likes | num_post | ... |
464.0 | 142.0 | ... |
364.0 | 125.0 | ... |
487.0 | 106.0 | ... |
258.0 | 123.0 | ... |
125.0 | 103.0 | ... |
myFunction:
def myFunction(x):
q22 = dataframe["num_likes"].quantile(0.22)
q45 = dataframe["num_likes"].quantile(0.45)
qc = q45 - q22
k = 3
if x >= q45 + k * qc:
return q45 + k * qc
elif x <= q22 - k * qc:
return q22 - k * qc
现在,由于我不知道如何获取它,因此我最终为每个具有的列运行该函数。另外,我尝试运行它,看来它不起作用
data["num_likes"].apply(lambda x : myFunction(x))[:5]
此外,结果似乎是错误的,因为我没有看到任何回报
num_likes | num_post | ... |
NaN | None | ... |
NaN | None | ... |
NaN | None | ... |
NaN | None | ... |
NaN | None | ... |
答案 0 :(得分:1)
得到None
的原因是因为if-elseif
块中没有路径返回true,所以myFunction
返回了None
。您是说if-else
吗?
除了清理您所拥有的东西外,我会做的事情也有所不同。首先q22,q45和qc仅需要计算一次(基于上述逻辑),并且可以将它们传递到函数中,而不是每次在函数中计算一次。其次,在这种情况下,您无需创建lambda
,apply
(docs)需要一个可调用的python(您的函数),并且可以像下面那样传递其他参数。
df = pd.DataFrame({
'num_likes': [464.0, 364.0, 487.0, 258.0, 125.0],
'num_post': [142.0, 125.0, 106.0, 123.0, 103.0]
})
def myFunction(x, q22, q45, qc):
k = 3
if x >= q45 + k * qc:
return q45 + k * qc
elif x <= q22 - k * qc:
return q22 - k * qc
else:
return -1
q22 = df["num_likes"].quantile(0.22)
q45 = df["num_likes"].quantile(0.45)
qc = q45 - q22
# pass additional arguments in an tuple, they will be passed to myFunction
df.num_likes.apply(myFunction, args=(q22, q45, qc))
# this will return a series which can be assigned to new column
# 0 -1
# 1 -1
# 2 -1
# 3 -1
# 4 -1
# Name: num_likes, dtype: int64