2017-05-03 224 views
1

建立精確匹配字符串

我刮租房信息數據,並與大熊貓分析。我計算了平均統計數據並將它們插入到熊貓數據框中:district_df

其中district_df列包含地區名稱:district_df['district']

另本district_df列包含街道名稱:district_df['subdistrict']

他們的樣子,

 district   subdistrict  
    Bergen-Enkheim  Bergen-Enkheim  
    Bornheim/Ostend   Bornheim 
    Bornheim/Ostend    Ostend 
      Harheim    Harheim 
     Innenstadt I   Altstadt 
     Innenstadt I  Bahnhofsviertel 
     Innenstadt I    Gallus 
     Innenstadt II   Bockenheim 
     Innenstadt II  Westend-Nord 
        ⋮     ⋮ 

問題

我從district_df每創建一個分區表(district_table)區。即對於上述我創建了五個分區表。我用下面的代碼做這個,

for district in d_set: # d_set is a set containing all district names 
    district_table = district_df[district_df['district'].str.match(district)] 

這段代碼的工作原理就是:創建一個每個分區的表。

但是,表Innenstadt II也包含Innenstadt I的小區。

在我看來,.str.match(district)匹配不準確,但部分。即Innenstadt I將匹配Innenstadt II

我的實際district_df列包含更多然後我在這裏顯示 - 問題發生各種各樣的地區名稱。

如何獲得精確匹配?

回答

2

我認爲你在環需要boolean indexing

d_set = district_df['district'].unique() 

for district in d_set: 
    district_table = district_df[district_df['district'] == district] 
    print (district_table) 

     district  subdistrict 
0 Bergen-Enkheim Bergen-Enkheim 
      district subdistrict 
1 Bornheim/Ostend Bornheim 
2 Bornheim/Ostend  Ostend 
    district subdistrict 
3 Harheim  Harheim 
     district  subdistrict 
4 Innenstadt I   Altstadt 
5 Innenstadt I Bahnhofsviertel 
6 Innenstadt I   Gallus 
     district subdistrict 
7 Innenstadt II Bockenheim 
8 Innenstadt II Westend-Nord 

如果需要dictDataFrames更好的是轉換groupby對象:

a = dict(tuple(district_df.groupby('district'))) 

print (a['Innenstadt I']) 
     district  subdistrict 
4 Innenstadt I   Altstadt 
5 Innenstadt I Bahnhofsviertel 
6 Innenstadt I   Gallus 
+0

我知道這將是愚蠢的東西很容易。謝謝。 – LucSpan

+0

很高興能幫助你,祝你好運! – jezrael

2

我會做這種方式:

{ dist: df[df.district == dist] for dist in df.district.unique() } 

但話又說回來,你可能會更好用多指標:

df.set_index(['district', 'subdistrict'], inplace=True) 

這是很多喜歡dict解決方案,但下游加工可能會更快。