我的数据框中有一个累积总和%列。 我想拥有一个遍历该列每个单元格并在新创建的列M_quintile中返回值的函数。
cumsum cumsumperc M_quintile
465 0.001320 a number between 1-5
439 0.002499 a number between 1-5
213 0.003624 a number between 1-5
616 0.004583 a number between 1-5
527 0.005468 a number between 1-5
这是我当前拥有的功能:
def score(x):
if x <= 0.20:
return 5
elif x <= 0.40:
return 4
elif x <= 0.60:
return 3
elif x <= 0.80:
return 2
else:
return 1
如何在专门针对cumsumperc列的特定列上应用此功能?
答案 0 :(得分:1)
我认为您正在寻找pd.cut()
。就您而言:
df['M_quintile'] = pd.cut(df.cumsumperc, bins=[-np.inf,0.2,0.4,0.6,0.8,np.inf], labels=[5,4,3,2,1])
>>> df
cumsum cumsumperc M_quintile
0 465 0.001320 5
1 439 0.002499 5
2 213 0.003624 5
3 616 0.004583 5
4 527 0.005468 5
这表示:如果cumsumperc
在负无穷大和0.2之间(bins
参数中的前两个值),则将其赋值为5(labels
参数中的第一个值),如果介于0.2和0.4之间,则将其分配为4,依此类推,直到介于0.8和无穷大之间,则将其分配为1。
在您的情况下,所有值都在负无穷大和0.2之间,因此它们都被赋值为5。为说明起见,请看一下如果添加另一个值会发生什么情况:
>>> df
cumsum cumsumperc
0 465 0.001320
1 439 0.002499
2 213 0.003624
3 616 0.004583
4 527 0.005468
5 999 0.720000
>>> df['M_quintile'] = pd.cut(df.cumsumperc, bins=[-np.inf,0.2,0.4,0.6,0.8,np.inf], labels=[5,4,3,2,1])
>>> df
cumsum cumsumperc M_quintile
0 465 0.001320 5
1 439 0.002499 5
2 213 0.003624 5
3 616 0.004583 5
4 527 0.005468 5
5 999 0.720000 2
答案 1 :(得分:1)
我认为通过Pandas可以有更好的方法,但是如果您想使用自己的函数,可以使用apply函数。
import pandas as pd
def score(x):
if x <= 0.20:
return 5
elif x <= 0.40:
return 4
elif x <= 0.60:
return 3
elif x <= 0.80:
return 2
else:
return 1
df['M_quintile'] = df['cumsumperc'].apply(score)
输出:
cumsum cumsumperc M_quintile
0 465 0.001320 5
1 439 0.002499 5
2 213 0.003624 5
3 616 0.004583 5
4 527 0.005468 5