簡體   English   中英

將新列添加到Pandas DataFrame,並用同一df的另一列填充第一個單詞

[英]Add new column to Pandas DataFrame and fill with first word from another column from same df

我擁有格羅斯特郡警察局從2011-16年報告的犯罪數據集。 這是我導入到Pandas數據框的.csv文件。 數據包括指出犯罪發生的下超級輸出區域(LSOA)的列,例如,對於圖克斯伯里(Tewkesbury)的犯罪,每條記錄都有對應的LSOA名稱,例如“ Tewkesbury 009D”; 'Tewkesbury 009E'。

我想將這些數據按與之相關的城鎮/城市進行分組,例如“ Gloucester”,“ Tewkesbury”,而忽略每個城市中特定的LSOA。 理想情況下,我會將一個新列添加到數據框,其中僅復制地名,並在其上進行分組。 我對如何進行分組感到很滿意,但首先不是新的列。 非常感謝您提供有關如何執行此操作的任何建議。

我不是Pandas專家,但我認為您可以進行字符串切片以去除最后五個數字(如果我沒記錯的話,它也支持正則表達式,因此如果需要,可以進行適當的“搜索”)。

#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列中提取字符串。

遵循以下原則應該可以:

df['town'] = [x.split()[0] for x in df['LSOA']]

您可以使用正則表達式從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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM