[英]Count frequency in Pandas groupby
我有一個看起來像這樣的數據框:
a b c result
0 80 50 10000 pass
1 80 50 10000 pass
2 100 50 10000 pass
3 100 50 10000 fail
...
XX 110 70 15000 pass
XX 110 70 15000 pass
XX 110 80 10000 fail
XX 110 80 10000 fail
我想獲得數據幀的每個組合(a、b、c)的“通過”頻率(以 % 為單位)。 例如上面的數據集應該導致
a b c passFreq
0 80 50 10000 1.0
1 100 50 10000 0.5
...
2 110 70 15000 1.0
3 110 80 10000 0.0
如果我做
df.groupby(['a', 'b', 'c']).describe()
我得到了頻率,但它沒有按照我想要的方式報告它,我不確定如何檢索頻率並從中創建一個新的數據集。
任何指導?
如果需要列result
所有值的百分比,請使用crosstab
:
print (pd.crosstab([df['a'], df['b'], df['c']], df['result'], normalize=0))
result fail pass
a b c
80 50 10000 0.0 1.0
100 50 10000 0.5 0.5
110 70 15000 0.0 1.0
80 10000 1.0 0.0
df2 = (pd.crosstab([df['a'], df['b'], df['c']],
df['result'], normalize=0)
.reset_index()
.rename_axis(None, axis=1))
print (df2)
a b c fail pass
0 80 50 10000 0.0 1.0
1 100 50 10000 0.5 0.5
2 110 70 15000 0.0 1.0
3 110 80 10000 1.0 0.0
如果只需要首先將比較值pass
給新列,然后聚合mean
:
df1 = (df.assign(new = df['result'].eq('pass'))
.groupby(['a', 'b', 'c'])['new']
.mean()
.reset_index(name='pass'))
print (df1)
a b c pass
0 80 50 10000 1.0
1 100 50 10000 0.5
2 110 70 15000 1.0
3 110 80 10000 0.0
df.groupby(['a', 'b', 'c'])['result'].mean()
您需要選擇列pass
,然后應用.reset_index(drop=True)
.mean()
和.reset_index(drop=True)
來重置索引:
df.groupby(['a', 'b', 'c'])['result'].mean().reset_index(drop=True)
如果你需要.describe
你也可以這樣做
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.