我在Pandas中有一个数据框:
In [10]: df
Out[10]:
Domain Use
0 graph.facebook.com 4242
1 news.bbc.co.uk 23423
2 news.more.news.bbc.co.uk 234432
3 profile.username.co 235523
4 offers.o2.co.uk 235523
5 subdomain.pyspark.org 2325
6 uds.data.domain.net 23523
7 domain.akamai.net 23532
我有一个脚本,可以在数据框的单个列上运行该脚本:完全可以按照我的意愿工作。
In [13]: for row in df.iterrows():
...: cdns = ['akamai', 'maxcdn', 'cloudflare']
...: tld = ['co.uk', 'com', 'org', 'co', 'net']
...: index = df.Domain[df.Domain.str.strip().str.endswith(tuple(tld))].str.split('.').tolist()
...:
...: for x in index:
...: if (x[len(x)-2]) in cdns:
...: if str(x[len(x)-1]) in tld:
...: print(str(x[len(x)-3])+'.'+str(x[len(x)-2])+'.'+ str(x[len(x)-1]))
...: elif (x[len(x)-2]) in cdns:
...: if str(x[len(x)-2]).rstrip()+'.'+ str(x[len(x)-1]).rstrip() in tld:
...: print(str(x[len(x)-4])+'.'+ str(x[len(x)-3])+'.'+str(x[len(x)-2])+'.'+ str(x[len(x)-1]))
...: elif str(x[len(x)-2]).rstrip()+'.'+ str(x[len(x)-1]).rstrip() in tld:
...: print(str(x[len(x)-3])+'.'+str(x[len(x)-2])+'.'+ str(x[len(x)-1]))
...: elif str(x[len(x)-1]) in tld:
...: print(str(x[len(x)-2])+'.'+ str(x[len(x)-1]))
但是,我需要在数据帧中添加一个新列,并将脚本的结果作为内容。所以我想有以下几列: -域名 - 采用 -新域
其中newdomain =我脚本的结果。
我该怎么做?我搜索过高低,但没有成功
更新 我在下面尝试过-但它将名为index的系列添加到该列中。我需要for循环的结果:
In [14]: df
Out[14]:
Domain Use
0 graph.facebook.com 4242
1 news.bbc.co.uk 23423
2 news.more.news.bbc.co.uk 234432
3 profile.username.co 235523
4 offers.o2.co.uk 235523
5 subdomain.pyspark.org 2325
6 uds.data.domain.net 23523
7 domain.akamai.net 23532
In [15]: df['newdomain']=index
In [16]: df
Out[16]:
Domain Use newdomain
0 graph.facebook.com 4242 [graph, facebook, com]
1 news.bbc.co.uk 23423 [news, bbc, co, uk]
2 news.more.news.bbc.co.uk 234432 [news, more, news, bbc, co, uk]
3 profile.username.co 235523 [profile, username, co]
4 offers.o2.co.uk 235523 [offers, o2, co, uk]
5 subdomain.pyspark.org 2325 [subdomain, pyspark, org]
6 uds.data.domain.net 23523 [uds, data, domain, net]
7 domain.akamai.net 23532 [domain, akamai, net]
因此for循环将输出:facebook.com,bbc.co.uk等。
答案 0 :(得分:0)
这应该可以解决问题
import pandas as pd
df=pd.DataFrame({'Domain':[' graph.facebook.com','news.bbc.co.uk ']})
df['new_domain']=df.Domain.str.split('.',1, expand=True)[1] # split on '.' then take second element