首页 > 解决方案 > 如何在 Pandas 中使用 Groupby 函数按年份分组时找到不同类别的百分比?

问题描述

所以我有一个来自 Kaggle的二手奥迪汽车数据库。

这是我的代码导入数据集的样子:

### headers ###
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

### path name ###
data_file_pathname = "etc.."

### import ###
my_data_frame = pd.read_csv(data_file_pathname, sep=",", header=0)

### preview of dataset ###
print(my_data_frame.head())

  model  year  price transmission  mileage fuelType  tax   mpg  engineSize
0    A1  2017  12500       Manual    15735   Petrol  150  55.4         1.4
1    A6  2016  16500    Automatic    36203   Diesel   20  64.2         2.0
2    A1  2016  11000       Manual    29946   Petrol   30  55.4         1.4
3    A4  2017  16800    Automatic    25952   Diesel  145  67.3         2.0
4    A3  2019  17300       Manual     1998   Petrol  145  49.6         1.0

年份从 1997 年到 2021 年,我有 3 种燃料类型(汽油、柴油和混合动力)。我想要的是具有每年燃料类型百分比的数据集。

例子:

 year  fuel    percentage    
 2003  Petrol  20.00
       Diesel  65.00
       Hybrid  15.00

到目前为止,我已经设法获得了每年每种燃料类型的汽车数量,我什至不确定我是如何做到的......这是代码:

Fuel_Year = my_data_frame.groupby(['year', 'fuelType'])
df = pd.concat([Fuel_Year.fuelType.count()], axis=1, keys="Counts")
print(df)
                  C
year fuelType      
1997 Petrol       1
1998 Petrol       1
2002 Petrol       2
2003 Diesel       4
     Petrol       2
2004 Diesel       1
     Petrol       4
2005 Diesel       2
     Petrol       5
2006 Diesel       3
     Petrol       6
2007 Diesel       7
     Petrol       9

我尝试了不同的方法,并在我检查的许多网页上使用了 transform('sum') 函数,但这对我来说并不成功。我的最终目标是创建某种堆叠直方图,其中 x 轴为年份,y 轴为百分比,以显示燃料类型每年的演变。

任何人都可以帮我找到正确的代码来生成每年燃料类型百分比的列吗?

非常感谢!:)

标签: pythonpandasdataframepandas-groupbypercentage

解决方案


df.groupby(['year'])['fuelType'].value_counts(normalize=True) * 100
    
year  fuelType
2016  Diesel       50.0
      Petrol       50.0
2017  Diesel       50.0
      Petrol       50.0
2019  Petrol      100.0
Name: fuelType, dtype: float64

推荐阅读