我有一个 csv 读入内存,作为 pandas 中的
accident_data_df
,它返回这样的表
路 | 事故 |
---|---|
I-10 | 10 |
I-15 | 10 |
I-10 东 | 10 |
美国街 | 10 |
美国ST | 10 |
我正在尝试使用 pandas 来压缩行,以便它们返回类似的内容
路 | 事故 |
---|---|
I-10 | 20 |
I-15 | 10 |
美国街 | 20 |
还有其他方法可以根据数据集对道路进行分类,例如,农场到市场显示为“FM”,SR 表示国道等。如果有助于任何推理,则将道路分为不同的类别0-7(例如,0 是州际公路,1 是国道)。
我想找到一种方法将所有单独的道路放入一行,因此将
I-10
和 I-10 East
分组在同一行,但这与 I-100
不同。因此,对于州际公路,它可以是“I-”之后的任何非数字的内容,例如空格或字母。
我已经看到类似的问题得到了回答,但它们不处理包含字符串的行,而且它们似乎也不包括如何将值求和到同一行中。如果其他地方已经回答了这个问题,请告诉我!
识别街道名称中的不同模式,创建单独的街道类型和街道名称列,并对这些列执行分组。
patterns = {
'Interstate': 'I-(?P<Name>\d+)\s?(?P<direction>.*)',
'Local': '(?i)(?P<Name>.*) St'
}
for street_type, pattern in patterns.items():
name = df['Road'].str.extract(pattern)['Name']
df.loc[~name.isna(), 'Name'] = name
df.loc[~name.isna(), 'Type'] = street_type
df.groupby(['Type', 'Name'])['Accident'].sum()