如何根据列条件进行行明智求和,并添加Class Wise specific value as Column?
How to perform Row wise sum based on column condition and add Class Wise specific value as Column?
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
这个table是基于Which class falls under which Cluster。像 Class 10, 11 , 14 等等都落入了 Cluster 0。而 Value 列表示有多少 class 成员。 Class 14 中的 3 位成员已落入 Cluster 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
其他集群也一样。我的最终目标是制作一个专栏 'Precision',即
df['Precision'] = df['Value']/ df['Cluster_Sum']
每行。
我如何使用 python 做到这一点?
EDIT :- 它工作得很好。感谢您的帮助。
最终这是My GOAL。对于每个 class 它的数量是固定的。比如 Class 1 : 10 , Class 2:12 ....等等。我需要添加一个像“Class_Sum”这样的列。其中包含的数据总数为class。然后我可以通过
找到召回
`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
如何做到?
试试 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
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
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
这个table是基于Which class falls under which Cluster。像 Class 10, 11 , 14 等等都落入了 Cluster 0。而 Value 列表示有多少 class 成员。 Class 14 中的 3 位成员已落入 Cluster 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
其他集群也一样。我的最终目标是制作一个专栏 'Precision',即
df['Precision'] = df['Value']/ df['Cluster_Sum']
每行。
我如何使用 python 做到这一点?
EDIT :- 它工作得很好。感谢您的帮助。
最终这是My GOAL。对于每个 class 它的数量是固定的。比如 Class 1 : 10 , Class 2:12 ....等等。我需要添加一个像“Class_Sum”这样的列。其中包含的数据总数为class。然后我可以通过
找到召回`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
如何做到?
试试 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
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