如何根据列条件执行行求和并将类特定值添加为列?

How to perform Row wise sum based on column condition and add Class Wise specific value as Column?

提问人:XYZ 提问时间:3/12/2022 最后编辑:XYZ 更新时间:3/12/2022 访问量:195

问:

Cluster Class   Value
0   0   10       1
1   0   11       1
2   0   14       3
3   0   18       1
4   0   26       1
5   0   29       1
6   0   30       1
7   1   0        2
8   1   19       1
9   1   20       1
10  1   21       2
11  1   36       1
12  1   26       1
13  1   27       1
14  1   37       2
15  1   33       1

此表基于哪个类属于哪个集群。像 10 类、11 类、14 类等都属于 0 类。和值列指示有多少类成员。就像 14 班的 3 名成员一样,他们落入了集群 0。

现在我想要的输出是这样的:

    Cluster Class   Value   Cluster_Sum

    0   0   10      1               9
    1   0   11      1               9
    2   0   14      3               9
    3   0   18      1               9
    4   0   26      1               9
    5   0   29      1               9
    6   0   30      1               9

其他集群也是如此。我的最终目标是为每一行制作一列“精度
”。
df['Precision'] = df['Value']/ df['Cluster_Sum']

如何使用python做到这一点?

编辑:- 它工作得很好。感谢您的帮助。


归根结底,这是我的目标。对于每个类,它的数量是固定的。像 Class 1 : 10 , Class 2:12 ....等等。我需要添加一个像“Class_Sum”这样的列。它由类的总数据组成。然后我可以通过以下方式找到召回

`df['Recall'] = df['Value']/ df['Class_Sum']`

但我的问题是我怎样才能附加我的信息

Class 1     10
Class 2     12
Class 3     23
Class 4     11
Class 5     17
Class 6     13
Class 7     16
Class 8     15
Class 9     14
Class 10    18
Class 11    09
Class 12    07
Class 13    16
Class 14    21
Class 15    17
Class 16    23
Class 17    10
Class 18    21
Class 19    12
Class 20    45
Class 21    12
Class 22    12
Class 23    15
Class 24    11
Class 25    09
Class 26    11
Class 27    08
Class 28    10
Class 29    11
Class 30    19
Class 31    17
Class 32    15
Class 33    12
Class 34    07
Class 35    06
Class 36    14
Class 37    13
Class 38    16

像这样添加到我的 DataFrame 中

 Cluster   Class          Class_SUm  Value ClusSum Precision RCll 
          10                  18
          11                  09
          14                  21
          18                  21
          26                  11
          29                  11
          30                  19

怎么做呢?

Python pandas 数据帧 聚类分析 精度

评论


答:

2赞 not_speshal 3/12/2022 #1

尝试:groupby

df["Cluster_Sum"] = df.groupby("Cluster")["Value"].transform("sum")

>>> df
    Cluster  Class  Value  Cluster_Sum
0         0     10      1            9
1         0     11      1            9
2         0     14      3            9
3         0     18      1            9
4         0     26      1            9
5         0     29      1            9
6         0     30      1            9
7         1      0      2           12
8         1     19      1           12
9         1     20      1           12
10        1     21      2           12
11        1     36      1           12
12        1     26      1           12
13        1     27      1           12
14        1     37      2           12
15        1     33      1           12
0赞 user17242583 3/12/2022 #2

groupby + transform("sum")是你的朋友在这里:

df['Precision'] = df["Value"] / df.groupby("Cluster")["Value"].transform("sum")

输出:

>>> df
    Cluster  Class  Value  Precision
0         0     10      1   0.111111
1         0     11      1   0.111111
2         0     14      3   0.333333
3         0     18      1   0.111111
4         0     26      1   0.111111
5         0     29      1   0.111111
6         0     30      1   0.111111
7         1      0      2   0.166667
8         1     19      1   0.083333
9         1     20      1   0.083333
10        1     21      2   0.166667
11        1     36      1   0.083333
12        1     26      1   0.083333
13        1     27      1   0.083333
14        1     37      2   0.166667
15        1     33      1   0.083333

评论

1赞 XYZ 3/12/2022
感谢您的回复。我在我的尝试中错过了那个转换部分