簡體   English   中英

python groupby多列,計數和百分比

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

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