简体   繁体   中英

How to calculate the percentage of the sum value of the column?

I have a pandas dataframe which looks like this:

Country  Sold
 Japan   3432
 Japan   4364
 Korea   2231
 India   1130
 India   2342
  USA    4333
  USA    2356
  USA    3423

I have use the code below and get the sum of the "sold" column

df1= df.groupby(df['Country'])
df2 = df1.sum()

I want to ask how to calculate the percentage of the sum of "sold" column.

You can get the percentage by adding this code

df2["percentage"] = df2['Sold']*100 / df2['Sold'].sum()

In the output dataframe, a column with the percentage of each country is added.

We can divide the original Sold column by a new column consisting of the grouped sums but keeping the same length as the original DataFrame, by using transform

df.assign(
    pct_per=df['Sold'] / df.groupby('Country').transform(pd.DataFrame.sum)['Sold']
    )

  Country  Sold   pct_per
0   Japan  3432  0.440226
1   Japan  4364  0.559774
2   Korea  2231  1.000000
3   India  1130  0.325461
4   India  2342  0.674539
5     USA  4333  0.428501
6     USA  2356  0.232991
7     USA  3423  0.338509

Simple Solution

You were almost there.

  1. First you need to group by country
  2. Then create the new percentage column (by dividing grouped sales with sum of all sales)
# reset_index() is only there because the groupby makes the grouped column the index
df_grouped_countries = df.groupby(df.Country).sum().reset_index()
df_grouped_countries['pct_sold'] = df_grouped_countries.Sold / df.Sold.sum()

Are you looking for the percentage after or before aggregation?

import pandas as pd
countries = [['Japan',3432],['Japan',4364],['Korea',2231],['India',1130],    ['India',2342],['USA',4333],['USA',2356],['USA',3423]]
df = pd.DataFrame(countries,columns=['Country','Sold'])
df1 = df.groupby(df['Country'])
df2 = df1.sum()
df2['percentage'] = (df2['Sold']/df2['Sold'].sum()) * 100
df2

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM