私は共通の列Accident_Index
で2つのデータフレーム、vehicles
とcasualties
、それぞれを持っている:パンダでは、別の列の値を与えられた列の値の相対的な確率を計算する方法は?
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']})
可視化を容易にするため、ここではvehicles
である:ここ
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
とはcasualties
です:
Accident_Index Casualty_Severity
0 1 fatal
1 1 serious
2 2 fatal
3 3 light
4 4 fatal
私はどのようにmを計算したいですか男性車の運転手が女性の運転手に関係する事故に比べて致命的である事故がいつでも起こり易い。
はこれまでのところ、私は以下のソリューションを作ってみた:致死率を持つ2件の自動車事故、男性を含む1とがあるので、
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
です女性ドライバーと2人の男性ドライバーが関与しています。
ただし、このコードは特に簡潔には見えません。どのように私はこれをリファクタリングすることができますか?
死傷者は少し曖昧ではありません。 2つの同じ事故指数は、異なるcasuality_severityを持っていますか? – Dark
Bharath、これは、2台の車両を含む1回の事故で、2台の死傷者(例えば、各車両の運転手)があったことを意味する。 –
車両データにどのようにマップしますか?最初の '1'は致命的で、2番目の' 1'は深刻ですか?それでマージすると行が繰り返されるためです。それはあなたのためにオックですか? – Dark