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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (265)

我们的想法是基于价值观行进行排序,从而使最大1秒行将获得最高分,我将在以后使用sort_valuesascending=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

除了CHANGGARAN之外,权重都是1,将设置为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

谢谢!

提问于
用户回答回答于

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')
用户回答回答于

I feel like we can using dot here

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)

扫码关注云+社区

领取腾讯云代金券