如何创建一个循环,该循环将在新列中输出百分比

How to create a loop that will output percentage in a new column

提问人:NEWBIE 提问时间:10/19/2023 最后编辑:NEWBIE 更新时间:10/19/2023 访问量:53

问:

我有一个看起来像这样的数据帧:

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
Pandas DataFrame 循环 分组百分比

评论

1赞 wjandrea 10/19/2023
你真的需要写一个循环吗,比如它是家庭作业的要求,还是你只是认为你这样做了?请参阅如何在 Pandas, TLDR 中遍历 DataFrame 中的行:如果可能的话,不要这样做。
1赞 not_speshal 10/19/2023
顶部表中第 2 行中的值应为“Y”而不是“N”,以匹配底部表。COL5
0赞 NEWBIE 10/19/2023
@wjandrea,我只是试图理解循环以及它在这种情况下是如何工作的。另外,我认为循环会更容易、更快地获得结果。

答:

0赞 not_speshal 10/19/2023 #1

您可以将每一列单独包含在 和 :groupbycount

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 中的任何一个是缺失值,你会得到错误的结果。COL1count