向Pandas DataFrame添加新列,并填充来自同一df

时间:2017-04-22 19:40:01

标签: python pandas dataframe calculated-columns

我有一份2011 - 16年格洛斯特郡警察局报告的犯罪数据集。这是我导入到Pandas数据帧的.csv文件。该数据包括列出发生犯罪的下超级输出区域(LSOA)的列,因此对于Tewkesbury的犯罪,每个记录具有相应的LSOA名称,例如, 'Tewkesbury 009D'; 'Tewkesbury 009E'。

我希望按照与之相关的城镇/城市对这些数据进行分组,例如: 'Gloucester','Tewkesbury',忽略了每个大都市中的特定LSOA。理想情况下,我会在数据框中添加一个新列,只需复制地名,然后将其分组。我对如何进行分组感到很自在,首先不是新专栏。感谢收到关于如何做到这一点的任何建议。

3 个答案:

答案 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