[英]How to add a new column to a pandas df that returns the smallest value that is greater in the same group from another dataframe
[英]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.