这个想法是根据值对行进行排序,以使最高1分的行获得最高分,我稍后将在sort_values
中将其与ascending=False
一起使用...也称为权重总结...
数据帧如下:
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
所有权重均为1,但将CHANGGARAN设置为2。
这是要计算分数的第一行的示例:
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
谢谢!
答案 0 :(得分:3)
在特定列上使用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')
答案 1 :(得分:2)
我觉得我们可以在这里使用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)