这是我的数据框: df
ID AU 1 0 2 1 3 2 4 0 5 3 6 4 7 1 8 2 9 5 10 2 11 4 12 1 13 5 14 3
我想通过使用某些条件基于列“ AU”创建一个新列“得分”。条件是:
最后期望的结果是:
ID AU分数 1 0 0 2 1 0,5 3 2 0 4 0 0 5 3 -0,5 6 4 -0,4 7 1 0,5 8 2 0 9 5 -0,6 10 2 0 11 4 -0,4 12 1 0,5 13 5 -0,6 14 3 -0,5
感谢您的帮助。
答案 0 :(得分:0)
将np.select
与eval
一起使用
s1=(df.AU>0)&(df.AU<=4)
s2=df.AU>4
df['Score']=np.select([s1,s2],[df.eval('(1-AU)*(1-0.5)+0.5'),df.eval('(1-AU)*0.2+0.2')],default=0)
df
Out[136]:
ID AU Score
0 1 0 0.0
1 2 1 0.5
2 3 2 0.0
3 4 0 0.0
4 5 3 -0.5
5 6 4 -1.0
6 7 1 0.5
7 8 2 0.0
8 9 5 -0.6
9 10 2 0.0
10 11 4 -1.0
11 12 1 0.5
12 13 5 -0.6
13 14 3 -0.5
答案 1 :(得分:0)
使用apply
函数:
import pandas as pd
def computeScore(x):
assert x >= 0
if (x == 0):
return 0
elif ((x > 0) & (x <= 4)):
return (1-x)*(1-0.5)+0.5
return (1-x)*0.2+0.2
d = {'ID': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
'AU': [0, 1, 2, 0, 3, 4, 1, 2, 5, 2, 4, 2, 5, 4]}
df = pd.DataFrame(data=d)
df["Score"] = pd.Series(df.AU).apply(computeScore)
API参考:https://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.Series.apply.html