2016-07-20 5 views
0

У меня есть dataframe ф.р.Панды: заменить значения в dataframe

ID active_seconds domain subdomain search_engine search_term 
0120bc30e78ba5582617a9f3d6dfd8ca 35 city-link.com msk.city-link.com None None 
0120bc30e78ba5582617a9f3d6dfd8ca 54 vk.com vk.com None None 
0120bc30e78ba5582617a9f3d6dfd8ca 34 mts.ru shop.mts.ru None None 
16c28c057720ab9fbbb5ee53357eadb7 4 facebook.com facebook.com None None 

и есть список url = ['city-link.com', 'shop.mts.ru']. Мне нужно сменить столбец subdomain. Если субдомен равен одному элементу от url, оставьте его. Если subdomain != elem from url и domain == elem from url Я должен переписать субдомен (записать домен на него). И если subdomain нет в списке без изменений. Как я могу сделать это с помощью панд? Я пытаюсь сделать это с петлей, но он провел много времени

domains = df['domain'] 
subdomains = df['subdomain'] 
urls = ['yandex.ru', 'vk.com', 'mail.ru'] 
for (domain, subdomain) in zip(domains, subdomains): 
    if subdomain in urls: 
     continue 
    elif domain in urls and subdomain not in urls: 
     df['subdomain'].replace(subdomain, domain, inplace=True) 

ответ

2

Первое, что вам нужно, чтобы получить записи, где домен поле в списке URLs:

domains_in_urls = df[df.domain.isin(urls)] 

Далее, вы должны принять эти записи и узнать, где запись подобласти поле не находятся в URLs:

subdomains_not_in_urls = domains_in_urls[~domains_in_urls.subdomain.isin(urls)] 

и заменяющий поддомен поля с полем домена для этих индексов в оригинальном dataframe:

df.loc[subdomains_not_in_urls.index, 'subdomain'] = \ 
     df.loc[subdomains_not_in_urls.index, 'domain'] 
Смежные вопросы