我有一份2011 - 16年格洛斯特郡警察局报告的犯罪数据集。这是我导入到Pandas数据帧的.csv文件。该数据包括列出发生犯罪的下超级输出区域(LSOA)的列,因此对于Tewkesbury的犯罪,每个记录具有相应的LSOA名称,例如, 'Tewkesbury 009D'; 'Tewkesbury 009E'。
我希望按照与之相关的城镇/城市对这些数据进行分组,例如: 'Gloucester','Tewkesbury',忽略了每个大都市中的特定LSOA。理想情况下,我会在数据框中添加一个新列,只需复制地名,然后将其分组。我对如何进行分组感到很自在,首先不是新专栏。感谢收到关于如何做到这一点的任何建议。
答案 0 :(得分:0)
我不是熊猫专家,但我认为你可以用字符串切片来删除最后五位数字(如果我没记错的话,它也支持正则表达式,所以你可以做一个正确的搜索'如果需要的话)
#x is the original dataframe
new_col = x.lsoa.str[:-5] #lsoa is the column containing city names
pd.concat([x, new_col], axis=1)
str方法可用于从数据帧的lsoa列中提取字符串。
答案 1 :(得分:0)
这些方面应该有效:
df['town'] = [x.split()[0] for x in df['LSOA']]
答案 2 :(得分:0)
您可以使用正则表达式从DataFrame中提取城市名称,然后将结果连接到原始DataFrame。如果您的初始DataFrame是df
df = pd.DataFrame([ 'Tewkesbury 009D', 'Tewkesbury 009E'], columns=['LSOA'])
In [2]: df
Out[2]:
LSOA
0 Tewkesbury 009D
1 Tewkesbury 009E
然后,您可以将城市名称和可选的LSOA代码提取到新的DataFrame df_new
df_new = df['LSOA'].str.extract('(\w*)\s(\d+\w*)', expand=True)
In [10]: df_new
Out[10]:
0 1
0 Tewkesbury 009D
1 Tewkesbury 009E
如果您要放弃代码,只需保留城市名称,请将正则表达式中的第二个括号移除为'(\w*)\s\d+\w*'
。现在,您可以将此结果附加到原始DataFrame
In [11]: df.join(df_new)
Out[11]:
LSOA 0 1
0 Tewkesbury 009D Tewkesbury 009D
1 Tewkesbury 009E Tewkesbury 009E