【问题标题】:Exact match string in panda column熊猫列中的精确匹配字符串
【发布时间】:2017-10-01 04:17:58
【问题描述】:

设置

我抓取住房广告数据并使用 pandas 进行分析。我计算了平均统计数据并将它们插入到熊猫数据框中: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)。 IE。对于以上内容,我创建了五个区表。我通过以下代码做到这一点,

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) 不完全匹配,但部分匹配。 IE。 Innenstadt I 将匹配 Innenstadt II

我的实际 district_df 列包含的内容比我在此处显示的要多 - 各种地区名称都会出现问题。

如何获得完全匹配?

【问题讨论】:

    标签: python string pandas match


    【解决方案1】:

    我认为你需要 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
    

    【讨论】:

    • 我知道这将是一件非常简单的事情。谢谢。
    【解决方案2】:

    我会这样做:

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

    但话说回来,使用 MultiIndex 可能会更好:

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

    这很像dict 解决方案,但下游处理可能更快。

    【讨论】:

      猜你喜欢
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 2022-11-26
      相关资源
      最近更新 更多