Python 大熊猫依靠str进行繁殖

Python 大熊猫依靠str进行繁殖,python,pandas,Python,Pandas,我正在与熊猫一起分析调查数据,并获得以下原始数据 Dept | Q3 | Q4 | -----| ---- |---- | HR | Yes | Yes | IT | No | Yes | HR | No | Yes | HR | Yes | Yes | IT | No | Yes | IT | Yes | Yes | 我正在尝试按部门和第三季度分组,并获得所有肯定回答的总数以及该问题中肯定回答的百分比。像这样的 Dept | Q3 - Yes

我正在与熊猫一起分析调查数据,并获得以下原始数据

Dept |  Q3  | Q4  |
-----| ---- |---- |
HR   | Yes  | Yes |
IT   | No   | Yes |
HR   | No   | Yes |
HR   | Yes  | Yes |
IT   | No   | Yes |
IT   | Yes  | Yes |
我正在尝试按部门和第三季度分组,并获得所有肯定回答的总数以及该问题中肯定回答的百分比。像这样的

Dept |  Q3 - Yes | Total |  %
-----| ----------| ----- | --
HR   |     2     |  3    |
IT   |     1     |  3    |
我使用了下面的代码来分组并获得总的yes计数,但不确定如何将total和%添加到该groupby的同一数据帧中

df.groupby("Dept")['Q3'].apply(lambda x: x[x.str.contains('Yes')].count())
任何帮助都将不胜感激。我有点困了


谢谢

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

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)

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

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)

让我们试试
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

让我们试试
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

这将获得第三季度的结果,如您的回答所示:

(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

这将获得第三季度的结果,如您的回答所示:

(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

您可以这样做:

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


您可以这样做:

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