2016-07-20 3 views
0

에 값을 대체 나는팬더는 : 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 

DF dataframe을 가지고 목록 url = ['city-link.com', 'shop.mts.ru'] 있습니다. 열을 subdomain으로 변경해야합니다. 하위 도메인이 url의 elem 중 하나와 같으면 그대로 둡니다. subdomain != elem from urldomain == elem from url 인 경우 하위 도메인을 다시 작성해야합니다 (도메인을 작성하십시오). 그리고 목록에 subdomain이 없다면 변경 사항이 없습니다. 팬더로 어떻게 할 수 있습니까? 나는 루프를 수행하려고하지만, 당신이 URL 목록에서 도메인 필드 레코드를 얻을 필요가

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

먼저 많은 시간을 보냈다 :

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

다음, 다음을해야을

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

을 그리고 원래 dataframe에서 그 인덱스에 대한 도메인 필드와 하위 필드를 대체 : 하위 도메인 필드에 URL을에없는 기록과 발견 기록

df.loc[subdomains_not_in_urls.index, 'subdomain'] = \ 
     df.loc[subdomains_not_in_urls.index, 'domain']