根据不同条件在Pandas数据框中创建一个新列

ctrl_z

这只是我庞大的数据框的一小部分:

data = {'index':  ['001', '001', '002', '002', '003', '003', '003', '004', '004', '004', '004', '005'],
        'vehicle': ['none', 'car', 'car', 'car', 'none', 'car', 'car', 'car', 'bus', 'bus', 'bus', 'motorcycle'],
        'cas_class': ['pedestrian', 'driver', 'driver', 'passenger', 'pedestrian', 'driver', 'driver', 'driver', 'driver', 'passenger', 'passenger', 'driver']}

df = pd.DataFrame (data, columns = ['index', 'vehicle', 'cas_class']) 
df     

输出:

    index   vehicle     cas_class
0   001     none        pedestrian
1   001     car         driver
2   002     car         driver
3   002     car         passenger
4   003     none        pedestrian
5   003     car         driver
6   003     car         driver
7   004     car         driver
8   004     bus         driver
9   004     bus         passenger
10  004     bus         passenger
11  005     motorcycle  driver
  1. 我想要做的是计算每个索引涉及多少辆车(索引表明发生了事故)。按条件计数最简单,最快的方法是什么?例如,我可以计算每次事故的驾驶员人数,这样我就能知道每次事故中有多少辆车。

有了这段代码,我设法做到了:

n_of_veh = df[df["cas_class"]=='driver'].groupby(['index']).size().reset_index()\
           .rename(columns= {0: 'n_of_veh'})
df = df.merge(n_of_veh, on='index')

这部分仍然是我要设法解决的问题:

  1. 我还想添加另一列名为“参考”的列,在这里我可以参考哪个伤亡是在哪个车辆上,或者在行人的情况下,哪个车辆撞到了行人。

有人可以帮忙吗?我还在学习熊猫。:/

期望的输出:

    index   vehicle     class        n_of_veh   reference
0   001     none        pedestrian   1          1  
1   001     car         driver       1          1
2   002     car         driver       1          1
3   002     car         passenger    1          1
4   003     none        pedestrian   2          1
5   003     car         driver       2          1
6   003     car         driver       2          2
7   004     car         driver       2          1 
8   004     bus         driver       2          2
9   004     bus         passenger    2          2
10  004     bus         passenger    2          2
11  005     motorcycle  driver       1          1

编辑

原始数据的翻译

# columns translation
df = df.rename({'FECHA': 'Date', 'RANGO HORARIO': 'Hour', 'DIA SEMANA': 'Day_of_Week', 'DISTRITO': 'District', 'LUGAR ACCIDENTE': 'Street_Address', 'Nº': 'Street_Number', 'Nº PARTE': 'Accident_Index', 'CPFA Granizo': 'WC_Hail', 'CPFA Hielo': 'WC_Ice', 'CPFA Lluvia': 'WC_Rainy', 'CPFA Niebla': 'WC_Foggy', 'CPFA Seco': 'WC_Dry', 'CPFA Nieve': 'WC_Snowy', 'CPSV Mojada': 'RC_Wet', 'CPSV Aceite': 'RC_Oil', 'CPSV Barro': 'RC_Mud', 'CPSV Grava Suelta': 'RC_Gravel_Loose', 'CPSV Hielo': 'RC_Ice', 'CPSV Seca Y Limpia': 'RC_Dry_and_Clean', '* Nº VICTIMAS': 'Number_of_Casualties', 'TIPO ACCIDENTE': 'Collision_Type', 'Tipo Vehiculo': 'Vehicle_Type', 'TIPO PERSONA': 'Casualty_Class', 'SEXO': 'Sex_of_Casualty', 'LESIVIDAD': 'Casualty_Severity', 'Tramo Edad': 'Age_Band_of_Casualty'}, axis=1)

# removing columns that are not needed
df = df.drop(columns= ['Date', 'Hour', 'Day_of_Week', 'District', 'Street_Address', 'Street_Number', 'WC_Hail', 'WC_Ice', 'WC_Rainy', 'WC_Foggy', 'WC_Dry', 'WC_Snowy', 'RC_Wet', 'RC_Oil', 'RC_Mud', 'RC_Gravel_Loose', 'RC_Ice', 'RC_Dry_and_Clean', 'Sex_of_Casualty', 'Age_Band_of_Casualty'])

# other translations
collision_dict = {'COLISION DOBLE': 'Double_Collision', 'ATROPELLO': 'Pedestrian_Hit', 'COLISION MULTIPLE': 'Multiple_Collision', 'CAIDA MOTOCICLETA': 'Motorcycle_Fall', 'CHOQUE CON OBJETO FIJO': 'Accident_with_a_Fixed_Object', 'CAIDA VIAJERO BUS': 'Bus_Passenger_Fall', 'CAIDA BICICLETA': 'Bicycle_Fall', 'CAIDA CICLOMOTOR': 'Moped_Fall', 'OTRAS CAUSAS': 'Other_Types', 'VUELCO': 'Ended_on_the_Roof', 'CAIDA VEHICULO 3 RUEDAS': '3-Wheel_Vehicle_Fall'}
vehtype_dict = {'TURISMO': 'OtherVehicles', 'NO ASIGNADO': 'Not_Assigned', 'MOTOCICLETA': 'Motorcycle', 'FURGONETA': 'GoodsVehicle', 'AUTOBUS-AUTOCAR': 'BusCoach', 'AUTO-TAXI': 'CarTaxi', 'BICICLETA': 'Bicycle', 'CICLOMOTOR': 'Motorcycle', 'CAMION': 'GoodsVehicle', 'VARIOS': 'OtherVehicles', 'AMBULANCIA': 'OtherVehicles', 'VEH.3 RUEDAS': 'OtherVehicles'}
cclass_dict = {'CONDUCTOR': 'Driver', 'VIAJERO': 'Passenger', 'TESTIGO': 'Witness', 'PEATON': 'Pedestrian'}
csev_dict = {'HL' : 'Slight', 'HG': 'Serious', 'MT': 'Fatal', 'NO ASIGNADA': 'Not_Assigned', 'IL': 'Not_Injured'}

df.replace({'Collision_Type': collision_dict}, regex=True, inplace=True)
df.replace({'Vehicle_Type': vehtype_dict}, regex=True, inplace=True)
df.replace({'Casualty_Class': cclass_dict}, regex=True, inplace=True)
df.replace({'Casualty_Severity': csev_dict}, regex=True, inplace=True)
里克

编辑

该解决方案可以回答OP在连续编辑中发布的原始数据集。变量名称将由原始数据而不是问题开头的示例数据选择。


1)我们首先创建一个查找数据框,其中具有每个事件的车辆数,然后对原始数据框使用左联接 df

df_n_of_veh = df.groupby(['Accident_Index']).apply(lambda x: sum(x['Casualty_Class'] == 'Driver')).to_frame(name='n_of_veh').reset_index()
df = df.merge(df_n_of_veh, how='left', on='Accident_Index') 

2)此解决方案假定每个驾驶员下方都有乘客。基本上'Driver'Casualty_Class每次发生事件时,每次出现时,我们加1 此后,由于乘客或证人仍然会有0,因此我们将其替换为1。这次我们使用行索引进行合并,因为它们在df_ref

df_ref = df.groupby('Accident_Index').apply(lambda x: (x['Casualty_Class'] == 'Driver').astype(int).cumsum()).to_frame(name='reference').reset_index(level='Accident_Index').drop(['Accident_Index'], axis=1)
df_ref.loc[df_ref['reference'] == 0, 'reference'] = 1
df = df.merge(df_ref, left_index=True, right_index=True) 

输出
(对不起,该图像,但是我认为这是显示它的最短方法)

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据数据框的其他列创建一个新的pandas数据框列

来自分类Dev

根据其他列行中的过滤值,在pandas数据框中创建一个新列

来自分类Dev

Python Pandas:根据另一个数据框的类别值创建新列

来自分类Dev

根据多列中的值和相同条件在pandas中创建一个新列

来自分类Dev

使用不同数据框中的另一个变量的条件创建新变量

来自分类Dev

根据一列中的条件创建一个新的熊猫列,并从同一数据框中的多列中分配值

来自分类Dev

在excel中根据不同的if条件创建一个新列

来自分类Dev

根据现有数据框中的其他列创建一个新列

来自分类Dev

根据pandas数据框中的其他列创建一个聚合列

来自分类Dev

根据多个数据框的条件创建一个新的数据框

来自分类Dev

在条件下在spark数据框中创建一个新列

来自分类Dev

根据与另一个数据框的匹配在数据框中创建新列

来自分类Dev

尝试使用Python / pandas根据来自另一个数据框的一列的内部和创建一个新的数据框

来自分类Dev

根据熊猫中另一列上的值在数据框中创建一个新列

来自分类Dev

在不同的数据框中查找相似的列值,然后创建一个新的数据框

来自分类Dev

使用 *args 编写函数在 Pandas 数据框中创建一个新列

来自分类Dev

语言:如何根据另一个数据框在数据框中创建新列?

来自分类Dev

根据另一行的条件在Pandas数据框中创建新列的最佳方法是什么?

来自分类Dev

使用一些条件基于列中的值(在R中)创建一个新的数据框

来自分类Dev

根据R中另一个数据框的索引创建一个新的数据框

来自分类Dev

如何基于另一个数据框上的条件匹配在数据框中创建新列?

来自分类Dev

根据不同的列创建一个新列

来自分类Dev

在数据框中创建一个新变量,条件是另一个数据框

来自分类Dev

根据条件在数据框中创建新列

来自分类Dev

如何根据条件在数据框中创建新列

来自分类Dev

根据另一列 R 中的条件创建一个新列

来自分类Dev

根据项目的后缀创建一个新列(数据框)

来自分类Dev

根据其他两列中的条件在R中创建一个新列

来自分类Dev

如何根据pandas中的不同条件和列对2个数据框进行分组

Related 相关文章

  1. 1

    根据数据框的其他列创建一个新的pandas数据框列

  2. 2

    根据其他列行中的过滤值,在pandas数据框中创建一个新列

  3. 3

    Python Pandas:根据另一个数据框的类别值创建新列

  4. 4

    根据多列中的值和相同条件在pandas中创建一个新列

  5. 5

    使用不同数据框中的另一个变量的条件创建新变量

  6. 6

    根据一列中的条件创建一个新的熊猫列,并从同一数据框中的多列中分配值

  7. 7

    在excel中根据不同的if条件创建一个新列

  8. 8

    根据现有数据框中的其他列创建一个新列

  9. 9

    根据pandas数据框中的其他列创建一个聚合列

  10. 10

    根据多个数据框的条件创建一个新的数据框

  11. 11

    在条件下在spark数据框中创建一个新列

  12. 12

    根据与另一个数据框的匹配在数据框中创建新列

  13. 13

    尝试使用Python / pandas根据来自另一个数据框的一列的内部和创建一个新的数据框

  14. 14

    根据熊猫中另一列上的值在数据框中创建一个新列

  15. 15

    在不同的数据框中查找相似的列值,然后创建一个新的数据框

  16. 16

    使用 *args 编写函数在 Pandas 数据框中创建一个新列

  17. 17

    语言:如何根据另一个数据框在数据框中创建新列?

  18. 18

    根据另一行的条件在Pandas数据框中创建新列的最佳方法是什么?

  19. 19

    使用一些条件基于列中的值(在R中)创建一个新的数据框

  20. 20

    根据R中另一个数据框的索引创建一个新的数据框

  21. 21

    如何基于另一个数据框上的条件匹配在数据框中创建新列?

  22. 22

    根据不同的列创建一个新列

  23. 23

    在数据框中创建一个新变量,条件是另一个数据框

  24. 24

    根据条件在数据框中创建新列

  25. 25

    如何根据条件在数据框中创建新列

  26. 26

    根据另一列 R 中的条件创建一个新列

  27. 27

    根据项目的后缀创建一个新列(数据框)

  28. 28

    根据其他两列中的条件在R中创建一个新列

  29. 29

    如何根据pandas中的不同条件和列对2个数据框进行分组

热门标签

归档