[英]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.