2017-05-03 179 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解决方案,但下游加工可能会更快。