【问题标题】:Pandas count on str with total熊猫依靠 str 来计算总数
【发布时间】:2021-02-22 08:17:47
【问题描述】:

我正在使用 Pandas 分析调查数据,并拥有以下原始数据

Dept |  Q3  | Q4  |
-----| ---- |---- |
HR   | Yes  | Yes |
IT   | No   | Yes |
HR   | No   | Yes |
HR   | Yes  | Yes |
IT   | No   | Yes |
IT   | Yes  | Yes |

我正在尝试对 Dept & Q3 进行分组,并获取所有回答的数量以及该问题中回答的总数和回答的百分比。像这样的

Dept |  Q3 - Yes | Total |  %
-----| ----------| ----- | --
HR   |     2     |  3    |
IT   |     1     |  3    |

我已经使用下面的代码进行分组并获得总数是计数但不确定如何将总数和百分比添加到该 groupby 的同一数据帧

df.groupby("Dept")['Q3'].apply(lambda x: x[x.str.contains('Yes')].count())

任何帮助将不胜感激。我有点卡住了。

谢谢!

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你可以这样做:

    out = df.groupby("Dept")["Q3"].agg([lambda x: (x == "Yes").sum(), "count"])
    out.columns = ["Q3 - Yes", "Total"]
    
    out["%"] = out["Q3 - Yes"] / out["Total"]
    

    输出

    print(out)
          Q3 - Yes  Total         %
    Dept                           
    HR           2      3  0.666667
    IT           1      3  0.333333
    
    

    【讨论】:

      【解决方案2】:

      您可以单独计算总计数并合并数据框。

      df2=df.groupby("Dept")['Q3'].apply(lambda x: x[x.str.contains('Yes')].count()
      df3=df.groupby("Dept")['Q3'].count()
      df4=pd.merge(df2,df3,on="Dept",how='outer')
      print(df4)
      

      【讨论】:

        【解决方案3】:

        让我们试试groupby + agg

        out = df.groupby('Dept').agg(lambda x : x.eq('Yes').sum()).join(df.groupby('Dept').size().to_frame('Total'))
        Out[42]: 
              Q3  Q4  Total
        Dept               
        HR     2   3      3
        IT     0   2      2
        It     1   1      1
        

        【讨论】:

          【解决方案4】:

          这将为您提供第三季度的结果,如您的回答所示:

          (pd.crosstab(df.Dept, df.Q3)
           .assign(Total=lambda df: df.sum(1))
           .loc[:, ["Yes", "Total"]])
          
          Q3  Yes     Total
          Dept        
          HR  2       3
          IT  1       3
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-04-11
            • 2019-02-14
            • 1970-01-01
            • 2018-03-19
            • 1970-01-01
            • 2018-11-19
            • 2017-11-23
            相关资源
            最近更新 更多