2015-04-26 1 views
2

У меня есть панд dataframeэффективно Перебор по словарю значений списка, пропуская недостающие значения Python 3

import pandas as pd 

df=pd.DataFrame({'Location': [ 'NY', 'SF', 'NY', 'NY', 'SF', 'SF', 'TX', 'TX', 'TX', 'DC'], 
       'Class': ['H','L','H','L','L','H', 'H','L','L','M'], 
       'Address': ['12 Silver','10 Fak','12 Silver','1 North','10 Fak','2 Fake', '1 Red','1 Dog','2 Fake','1 White'], 
       'Score':['4','5','3','2','1','5','4','3','2','1',]}) 

И я хочу добавить 2 метки, которые я хранятся в словарях. Обратите внимание, что второй словарь не включает в себя ключ «A»

df['Tag1'] ='' 
df['Tag2'] ='' 

tagset1 = {'A':['NY|SF'], 
      'B':['DC'], 
      'C':['TX'], 
      } 
for key in tagset1: 
    df.loc[df.Location.str.contains(tagset1[key][0]) & (df.Tag1 == ''),'Tag1'] = key 


tagset2= {'B':['H|M'], 
      'C':['L'], 
      } 
for key in tagset2: 
    df.loc[df.Class.str.contains(tagset2[key][0]) & (df.Tag2 == ''),'Tag2'] = key 

print (df) 

Если я хочу, чтобы объединить оба словаря, чтобы сделать код более читаемым и эффективным я должен заполнить место для А в newtagset['A'][1] с '' или есть другой способ сделать итератор игнорировать или пропустить позицию newtagset['A'][1] при повторении позиции в списке?

newtagset = {'A':['NY|SF', '',], 
      'B':['DC','H|M',], 
      'C':['TX','L',], 
      } 


for key in newtagset: 
    df.loc[df.Location.str.contains(newtagset[key][0]) & (df.Tag1 == ''),'Tag1'] = key 

for key in newtagset: 
    df.loc[df.Class.str.contains(newtagset[key][1]) & (df.Tag2 == ''),'Tag2'] = key 

print (df) 

Большинство решений я нашел использует itertools Skip multiple iterations in loop python это единственный способ?

ответ

1

Нет ничего плохого в простых continue.

for key, value in newtagset.items(): # I found dict.items cleaner 
    if not value[1]: 
     continue 
    df.loc... 

Немного не по теме:

& (df.Tag1 == '') является излишним. Мне было бы полезно, только если бы вы имели совпадения в значениях, но это привело бы к непредсказуемому поведению, поскольку dict не упорядочен.

Смежные вопросы