元素的大小和百分比

时间:2018-06-11 11:43:12

标签: python pandas

我正在阅读带有pandas的CSV文件,在我读完文件后,我想计算两件事:

  1. 项目数
  2. %项目
  3. 例如,如果我的数据是[X,X,Y,Z,Z,X,X,Y,Z,Y],我希望我的输出为

    X 4 40.0
    Y 3 30.0
    Z 3 30.0
    

    我尝试了以下但只输出总和

    train = pd.read_csv("./../input/train.csv")
    grouped = train.groupby([x ,y]).size()
    

    这只计算百分比:

    train = pd.read_csv("./../input/train.csv")
    grouped = grouped.groupby(level=[0]).apply(lambda x: x / x.sum())
    

    我怎样才能同时获得两者?

2 个答案:

答案 0 :(得分:3)

我认为需要按sum的{​​{3}}新计数列除以百分比列:

df = pd.DataFrame({'A':list('XXYZZXXYZY')})

df = df.groupby('A').size().reset_index(name='count')
df['%'] = df['count'].div(df['count'].sum()).mul(100)
print (df)
   A  count     %
0  X      4  40.0
1  Y      3  30.0
2  Z      3  30.0

使用div的替代解决方案:

df = pd.concat([df['A'].value_counts().rename('count'), 
                df['A'].value_counts(normalize=True).rename('%').mul(100)], axis=1)

df = df.rename_axis('A').reset_index()
print (df)
   A  count     %
0  X      4  40.0
1  Y      3  30.0
2  Z      3  30.0

答案 1 :(得分:1)

我会分别计算两者并将它们连接起来:

d = {'col_one': ['X','X','Y','Z','Z','X','X','Y','Z','Y']}
df = pd.DataFrame(data=d)

nb_rows = len(df)

serie_count = df.groupby('col_one').size().rename('count')
serie_percentage = (100.*serie_count/nb_rows).rename('percentage')

final_df = pd.concat([serie_count, serie_percentage], axis=1)

输出:

        count   percentage
col_one
X       4       40.0
Y       3       30.0
Z       3       30.0