这个想法是根据值对行进行排序,这样最大值为1的行将获得最高分数,稍后我将使用它与ascending=False
进行sort_values
...它也被称为加权总和。
数据帧如下:
ID SINNOUVEAU PERTETOTAL CHANGGARAN SOCLOCATIO SINISAMEDI NOMASCONDU INIREPET
0 1 1 1 0 0 0 1 0
1 1 0 1 0 0 0 1 0
2 1 1 0 1 0 0 1 0
0 2 1 1 1 0 0 1 0
1 2 0 1 0 0 0 1 0
2 2 1 0 1 0 0 1 0
除了将设置为2的CHANGGARAN之外,所有的权重都是1。
下面是要计算分数的第一行的示例:1x1 + 1x1 + 0x2 + 0x1 + 0x1 + 1x1 + 0x1=3
最后,这是排序前的预期分数:
ID SINNOUVEAU PERTETOTAL CHANGGARAN SOCLOCATIO SINISAMEDI NOMASCONDU INIREPET SCORE
0 1 1 1 0 0 0 1 0 3
1 1 0 1 0 0 0 1 0 2
2 1 1 0 1 0 0 1 0 4
0 2 1 1 1 0 0 1 0 5
1 2 0 1 0 0 0 1 0 2
2 2 1 0 1 0 0 1 0 4
谢谢!
发布于 2019-06-02 23:44:39
在特定列上使用replace
,然后计算各列的总和。
# Drop "ID" first because it is not a part of the sum
df.replace({'CHANGGARAN': {1: 2}}).drop('ID', 1).sum(axis=1)
0 3
1 2
2 4
0 5
1 2
2 4
dtype: int64
将结果重新分配给列,然后使用它对DataFrame进行排序:
df['SCORE'] = df.replace({'CHANGGARAN': {1: 2}}).drop('ID', 1).sum(axis=1)
df_sorted = df.sort_values('SCORE')
发布于 2019-06-03 00:26:58
我觉得我们可以在这里使用dot
a=np.ones(df.shape[1])
a[0]=0
a[3]=2
df.dot(a)
0 3.0
1 2.0
2 4.0
0 5.0
1 2.0
2 4.0
dtype: float64
#df['SCORE']=df.dot(a)
https://stackoverflow.com/questions/56416506
复制相似问题