gpt4 book ai didi

python - 在 Pandas 中,如何计算给定另一列值的列值的相对概率?

转载 作者:太空宇宙 更新时间:2023-11-03 14:35:08 25 4
gpt4 key购买 nike

我有两个数据框,vehiclescasualties,每个数据框都有一个公共(public)列 Accident_Index:

import pandas as pd

vehicles = pd.DataFrame({'Accident_Index': [1, 1, 2, 3, 3, 4, 4],
'Vehicle_Type': ['car', 'car', 'motorcyle', 'car', 'car', 'car', 'car'],
'Sex_Driver': ['male', 'female', 'male', 'female', 'female', 'male', 'male']})

casualties = pd.DataFrame({'Accident_Index': [1, 1, 2, 3, 4],
'Casualty_Severity': ['fatal', 'serious', 'fatal', 'light', 'fatal']})

为了便于可视化,这里是车辆:

   Accident_Index Sex_Driver Vehicle_Type
0 1 male car
1 1 female car
2 2 male motorcyle
3 3 female car
4 3 female car
5 4 male car
6 4 male car

这是伤亡人数:

   Accident_Index Casualty_Severity
0 1 fatal
1 1 serious
2 2 fatal
3 3 light
4 4 fatal

我想计算一下,男性汽车司机发生的事故比女性汽车司机发生的事故致命的可能性高出多少倍。

到目前为止,我已经提出了以下解决方案:

dfm = casualties.merge(vehicles, on='Accident_Index')
dfm_cars = dfm.loc[dfm.Vehicle_Type == 'car']

dfm_cars_fatal_male = dfm_cars.isin({'Casualty_Severity': ['fatal'], 'Sex_Driver': ['male']})
male_driver_involved_in_fatal_car_accident = (dfm_cars_fatal_male['Casualty_Severity'] & dfm_cars_fatal_male['Sex_Driver']).sum()

dfm_cars_fatal_female = dfm_cars.isin({'Casualty_Severity': ['fatal'], 'Sex_Driver': ['female']})
female_driver_involved_in_fatal_car_accident = (dfm_cars_fatal_female['Casualty_Severity'] & dfm_cars_fatal_female['Sex_Driver']).sum()

print(male_driver_involved_in_fatal_car_accident / female_driver_involved_in_fatal_car_accident)

本例中的答案是3,因为有两起车祸导致死亡,其中一起涉及一名男性和一名女性司机,另一份涉及两名男性司机。

但是,这段代码看起来并不是特别简洁。我该如何重构这个?

最佳答案

IIUC,您可以使用merge + query + groupby:

g = casualties.merge(vehicles, on='Accident_Index')\
.query("Vehicle_Type == 'car' and Casualty_Severity == 'fatal'")\
.groupby('Sex_Driver').Sex_Driver.count()

g / g.sum()

Sex_Driver
female 0.25
male 0.75
Name: Sex_Driver, dtype: float64
<小时/>

为了使这更简单,您可以使用变量进行查询:

vehicle = 'car'
severity = 'fatal'

然后您可以将查询步骤重写为:

query("Vehicle_Type == @vehicle and Casualty_Severity == @severity")

如果您想将代码放入函数中并针对各种输入组合进行测试,这可以更轻松地重用您的代码。

关于python - 在 Pandas 中,如何计算给定另一列值的列值的相对概率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47010032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com