2017-05-03 33 views
1

セットアップ完全一致文字列

私は住宅の広告データをこすりとパンダと分析します。平均統計を計算し、パンダのデータフレームに挿入しました:district_df

district_df列の1つに、地区名:district_df['district']が含まれています。私はdistrict_dfあたりから地区テーブル(district_table)を作成する問題

彼らがどのように見える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列の別の

はsubdistrictの名前が含まれています地区。私。上記のために私は5つの地区テーブルを作成します。私は次のコードでこれを行います。

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

このコードは次のように動作します.1つの表が作成されます。

ただし、Innenstadt IIの表には、Innenstadt Iというサブディストリビューションも含まれています。

.str.match(district)は正確ではないが部分的に一致しているようです。私。 Innenstadt IInnenstadt 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 

必要DataFramesdictより良いが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ソリューションのようにたくさんあるが、下流の処理より速くなる可能性が高い。

関連する問題