这是我拥有的数据框的头部:

london.head()

    Location    Borough                         Post town
0   Abbey Wood  Bexley, Greenwich               LONDON
1   Acton       Ealing, Hammersmith and Fulham  LONDON
2   Addington   Croydon                         CROYDON
3   Addiscombe  Croydon                         CROYDON
4   Albany Park Bexley                          BEXLEY, SIDCUP


从维基百科抓取的伦敦地区列表:
https://en.wikipedia.org/wiki/List_of_areas_of_London

自治市镇以逗号分隔,有些地点位于两个自治市镇。

我有一个东伦敦的行政区清单,我想以此为依据过滤数据框。

east_lon = ['Tower Hamlets', 'Newham', 'Waltham Forest', 'Barking and Dagenham', 'Redbridge', 'Havering', 'Hackney']


我尝试使用此嵌套的for循环来执行此操作,该循环检查列表中单个自治市镇或拆分后的一个自治市镇的成员资格。

for index, row in london.iterrows():
    for borough in row['Borough'].split():
        if borough or (borough + ',') not in east_lon:
           london.drop(index, inplace=True)


我收到以下错误


  在轴'中找不到[0]


我做错了什么?有没有更合适的方式写这个?

最佳答案

想法是使用isdisjoint按组比较值,最后使用~进行反转掩码:

east_lon = ['Bexley', 'Ealing', 'Waltham Forest']

s = set(east_lon)
mask = df['Borough'].apply(lambda x: set(x.split(', ')).isdisjoint(s))

df = df[~mask]
print (df)
      Location                         Borough       Post town
0   Abbey Wood               Bexley, Greenwich          LONDON
1        Acton  Ealing, Hammersmith and Fulham          LONDON
4  Albany Park                          Bexley  BEXLEY, SIDCUP

关于python - 检查列表中的拆分文本成员身份后,如何从数据框中删除行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57347532/

10-14 16:11
查看更多