簡體   English   中英

Pandas 總數

[英]Pandas count on str with total

我正在使用 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 的相同 dataframe

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

任何幫助,將不勝感激。 我有點卡住了。

謝謝!

你可以這樣做:

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

out["%"] = out["Q3 - Yes"] / out["Total"]

Output

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

您可以單獨計算總計數並合並數據框。

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

如您的答案所示,這將為您提供第三季度的結果:

(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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM