[英]python groupby multiple columns, count and percentage
我有一個測試數據框:
data= (['a','test1', 'cat'], ['a','test1', 'cat'], ['b', 'test2', 'dog'])
pd.DataFrame(data, columns= ['col1','col2','col3'])
我如何能夠按 col1、col2 和 col3 進行分組,以及將每組的計數和百分比按最高值排序在頂部?
預期的輸出是:
a test1 cat 2 66.6
b test2 dog 1 33.3
謝謝!
這是使用groupby.ngroup
和value_counts
另一種方法:
g = df.groupby(['col1','col2','col3'],sort=False)
s = g.ngroup().value_counts(normalize=True,sort=False)
s.index = g.groups.keys()
out = g.size().to_frame('Size').assign(Percentage=s.mul(100).round(2)).reset_index()
col1 col2 col3 Size Percentage
0 a test1 cat 2 66.67
1 b test2 dog 1 33.33
嘗試這個
df_final = df.groupby(df.columns.tolist()).size().reset_index(name='counts')
df_final['percentage'] = df_final.counts / len(df) * 100
Out[78]:
col1 col2 col3 counts percentage
0 a test1 cat 2 66.6667
1 b test2 dog 1 33.3333
# sample data
data= (['a','test1', 'cat'], ['a','test1', 'cat'], ['b', 'test2', 'dog'])
df = pd.DataFrame(data, columns= ['col1','col2','col3'])
# create a function that calls df and the len of the frame
def my_func(df, l=len(df)):
data = {
'count': df['col3'].count(),
'percent': df['col3'].count() / l*100
}
return pd.Series(data)
# groupby and apply the function and sort values
df.groupby(['col1', 'col2', 'col3']).apply(my_func).sort_values('percent', ascending=False)
count percent
col1 col2 col3
a test1 cat 2.0 66.666667
b test2 dog 1.0 33.333333
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.