熊猫专栏中的完全匹配字符串

时间:2017-05-03 11:04:57

标签: python string pandas match

设置向上

我抓住住房广告数据并用熊猫分析。我已经计算了平均统计数据并将它们插入到pandas数据帧中:<div class="holder"> <div class="spinner"> </div> <div class="loader"> LOADING ... </div> </div>

其中一个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_table)。即对于上面我创建了五个分区表。我通过以下代码执行此操作,

district_df

此代码有效,即:创建每个区的表。

但是,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列包含的内容多于我在此处显示的内容 - 各种地区名称都会出现问题。

如何获得完全匹配?

2 个答案:

答案 0 :(得分:2)

我这样做:

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

但是再次使用MultiIndex可能会更好:

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

这与dict解决方案非常相似,但下游处理可能会更快。

答案 1 :(得分: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

如果dict需要DataFrames更好,则转换为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