根据Pandas DataFrame中的权重计算分数

时间:2019-06-02 15:38:49

标签: python pandas dataframe

这个想法是根据值对行进行排序,以使最高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

谢谢!

2 个答案:

答案 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)