2016-12-23 2 views
0

меня есть словарьПанды - Сравнение значений столбцов со значением в словаре

d = {1:a,2:a} 

У меня также есть панды кадр «ДФ»

0 x y 
1 1 10 
2 2 56 

по какой-то причине не может соответствовать до х значений со словарными клавишами:

for index, row in df.iterrows(): 
    for x,y in d.items(): 
     if row['x'] == x: 
      print "Got a Match" 
     else: 
      print "No Match Found" 

Все, что у меня есть, было «Нет совпадения найдено». Есть ли что-то, что я делаю неправильно? Данные в серии pandas были «float64», а ключи были «int» в словаре, но я преобразовал серию pandas в int и все еще не смог сопоставить эти элементы. Любая помощь оценивается.

Благодаря

+0

Попробуйте itertuples вместо с тем же кодом –

+0

Он отлично работает для меня, какую версию python вы используете? –

+0

Кроме того, какова конечная цель вашей проблемы. Не кажется, что вам нужен цикл. Можете ли вы дать больше информации. И для отладки внутри вашего внутреннего цикла используйте функцию печати, чтобы получить дополнительную информацию: 'print (строка ['x'], x)' –

ответ

2

Если вы хотите создать новый столбец на основе словаря, вы можете использовать pandas.Series.map:

>>> df['n'] = df['x'].map(d) 
>>> df 
    x y  n 
1 1 10 val1 
2 10 56 NaN 
+0

Это решило мою проблему. Спасибо, Роман. –

0

считают это df

x y 
0  
1 1 10 
2 2 56 
3 3 11 

и словарь

d = {1: 'a', 2: 'a'} 

При использовании pd.Series.map она заполняет, где он может и возвращает NaN где ключ не существует. Это может быть полезно для определения того, где находятся x, и для замены значений позже.

df.x.map(d) 

0 
1  a 
2  a 
3 NaN 
Name: x, dtype: object 

d_ = {k: 'Match!' for k, _ in d.items()} 
df.x.map(d_).fillna('No Match :-(') 

0 
1   Match! 
2   Match! 
3 No Match :-(
Name: x, dtype: object 
Смежные вопросы