python - 如何在 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 轴为百分比,以显示燃料类型每年的演变。
任何人都可以帮我找到正确的代码来生成每年燃料类型百分比的列吗?
非常感谢!:)
解决方案
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
推荐阅读
- graphics - 用于 LOD 的 Octree 中基于体素的 semless 网格
- swift - Swift:为什么 JSONDecoder (Codable/Decodable) 不调用结构的 init() 方法?
- python - 为什么`global`语句不影响当前块内的块?
- angular - 使用服务保存产品信息
- javascript - 错误:直方图
- angular - 可以根据角度条件进行路由吗?
- django - 负载平衡在单个硬件服务器上有意义吗?
- python - 我只想将名字 john 添加到垂直列表的末尾,但我不知道如何使用基本功能,请不要导入
- android - OutOfMemoryError:pthread_create 尝试发出 http 请求时
- reactjs - 当我尝试传递另一个道具时,为什么打字稿会在我的使用休息道具的 HOC 中触发错误?