提问人:NEWBIE 提问时间:10/19/2023 最后编辑:NEWBIE 更新时间:10/19/2023 访问量:53
如何创建一个循环,该循环将在新列中输出百分比
How to create a loop that will output percentage in a new column
问:
我有一个看起来像这样的数据帧:
COL1型 | COL2型 | COL3型 | COL4型 | COL5型 | COL6型 |
---|---|---|---|---|---|
S1系列 | 一个 | 苹果 | 通道 1 | N | 第2节 |
S1系列 | 一个 | 苹果 | 通道 2 | Y | 第2节 |
S1系列 | 一个 | 苹果 | 通道 1 | Y | 第2节 |
S2系列 | 一个 | 苹果 | 通道 1 | N | 第2节 |
S1系列 | B | 香蕉 | 通道 2 | N | 第2节 |
S1系列 | B | 香蕉 | 通道 1 | N | 第2节 |
我需要帮助编写一个循环来计算每个记录组合的出现百分比。我希望在此计算中忽略 COL1。关键标识符是 COL2 和 COL3,所以我认为我需要在 COL2 和 COL3 上使用 groupby,然后计算 COL4-COL6 的出现百分比以获得以下结果。我怎样才能做到这一点?
COL1型 | COL2型 | COL3型 | COL4型 | COL5型 | COL6型 | COL4_PCT | COL5_PCT | COL6_PCT |
---|---|---|---|---|---|---|---|---|
S1系列 | 一个 | 苹果 | 通道 1 | N | 第2节 | .75 | .50 | 1 |
S1系列 | 一个 | 苹果 | 通道 2 | Y | 第2节 | .25 | .50 | 1 |
S1系列 | 一个 | 苹果 | 通道 1 | Y | 第2节 | .75 | .50 | 1 |
S2系列 | 一个 | 苹果 | 通道 1 | N | 第2节 | .75 | .50 | 1 |
S1系列 | B | 香蕉 | 通道 2 | N | 第2节 | .50 | 1 | 1 |
S1系列 | B | 香蕉 | 通道 1 | N | 第2节 | .50 | 1 | 1 |
答:
0赞
not_speshal
10/19/2023
#1
您可以将每一列单独包含在 和 :groupby
count
counter = df.groupby(["COL2","COL3"])["COL2"].transform("count")
for column in ["COL4", "COL5", "COL6"]:
df[f"{column}_PCT"] = df.groupby(["COL2", "COL3", column])["COL2"].transform("count").div(counter)
>>> df
COL1 COL2 COL3 COL4 COL5 COL6 COL4_PCT COL5_PCT COL6_PCT
0 S1 A Apples Aisle 1 N Section 2 0.75 0.5 1.0
1 S1 A Apples Aisle 2 Y Section 2 0.25 0.5 1.0
2 S1 A Apples Aisle 1 Y Section 2 0.75 0.5 1.0
3 S2 A Apples Aisle 1 N Section 2 0.75 0.5 1.0
4 S1 B Bananas Aisle 2 N Section 2 0.50 1.0 1.0
5 S1 B Bananas Aisle 1 N Section 2 0.50 1.0 1.0
评论
0赞
wjandrea
10/19/2023
counter
如果缺少任何值,则错误。OP说无论如何都要忽略它。请改用列的计数。COL1
0赞
not_speshal
10/19/2023
是的,计算哪一列没有区别(无论如何我都更改了它),并且提供的示例没有缺失值。
0赞
wjandrea
10/19/2023
哎呀,我没有注意到你也在循环中使用。同样的事情也适用于那里。问题是这是针对非缺失值的,所以如果 COL4-COL6 中的任何一个是缺失值,你会得到错误的结果。COL1
count
评论
COL5