Pandas:替换datafram中的值

2024-03-28 18:40:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧

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 urldomain == elem from url,我应该重写子域(向它写入域)。如果subdomainno在列表中没有变化。 我怎么能和熊猫一起做呢? 我试着用loop做,但是花了很多时间

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)

Tags: subdomainincomnoneurlcitydfsearch
1条回答
网友
1楼 · 发布于 2024-03-28 18:40:03

首先,您需要获取URL列表中域字段所在的记录:

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

接下来,您必须获取这些记录并找出子域字段不在URL中的记录:

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

并用原始数据帧中这些索引的域字段替换子域字段:

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

相关问题 更多 >