首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Pandas DataFrame中根据权重计算分数

在Pandas DataFrame中根据权重计算分数
EN

Stack Overflow用户
提问于 2019-06-02 23:38:50
回答 2查看 620关注 0票数 2

这个想法是根据值对行进行排序,这样最大值为1的行将获得最高分数,稍后我将使用它与ascending=False进行sort_values ...它也被称为加权总和。

数据帧如下:

代码语言:javascript
复制
    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

最后,这是排序前的预期分数:

代码语言:javascript
复制
    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

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-02 23:44:39

在特定列上使用replace,然后计算各列的总和。

代码语言:javascript
复制
# 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进行排序:

代码语言:javascript
复制
df['SCORE'] = df.replace({'CHANGGARAN': {1: 2}}).drop('ID', 1).sum(axis=1)
df_sorted = df.sort_values('SCORE')
票数 3
EN

Stack Overflow用户

发布于 2019-06-03 00:26:58

我觉得我们可以在这里使用dot

代码语言:javascript
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56416506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档