我有一个如下数据框,
import pandas as pd
df = pd.DataFrame({'value': [54, 74, 71, 78, 12]})
预期的输出
value score
54 scaled value
74 scaled value
71 scaled value
78 50.000
12 600.00
我想给所有分数分配50到600之间的一个分数,但是最低值必须具有最高分数。你有主意吗?
答案 0 :(得分:2)
不确定要实现的目标,也许可以为此输入提供准确的预期输出。 但是,如果我理解得很好,也许您可以尝试
import pandas as pd
df = pd.DataFrame({'value': [54, 74, 71, 78, 12]})
min = pd.DataFrame.min(df).value
max = pd.DataFrame.max(df).value
step = 550 / (max - min)
df['score'] = 600 - (df['value']-min) * step
print(df)
这将输出
value score
0 54 250.000000
1 74 83.333333
2 71 108.333333
3 78 50.000000
4 12 600.000000
答案 1 :(得分:1)
这是我的主意。但我认为您的分数有一个量表,而这个量表在您的问题中缺失。
dfmin = df.min()[0]
dfmax = df.max()[0]
dfrange = dfmax - dfmin
score_value = (600-50)/dfrange
df.loc[:,'score'] = np.where(df['value'] == dfmin, 600,
np.where(df.value == dfmax,
50,
600 - ((df.value - dfmin)* (1/score_value))))
df
会产生:
value score
0 54 594.96
1 74 592.56
2 71 592.92
3 78 50.00
4 12 600.00
由于缺少比例尺,因此与您的输出不匹配。