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

2024-06-12 01:42:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,vehiclescasualties,每个都有一个公共列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']})

{cd1>的视觉效果是:

^{pr2}$

这里是casualties

   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,因为有两起车祸造成死亡,一起涉及一名男性和一名女性驾驶员,另一名涉及两名男性驾驶员。在

然而,这段代码似乎并不特别简洁。我如何重构它?在


Tags: indexdrivercarcarsmalefemale驾驶员severity
1条回答
网友
1楼 · 发布于 2024-06-12 01:42:25

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

为了简化这一点,可以使用变量进行查询:

^{pr2}$

然后可以重写query步骤:

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

这使得重用代码变得更容易,如果你想,比如说,把它放在一个函数中,并针对各种输入组合进行测试。在

相关问题 更多 >