Pandas 从现有列添加列 based_domain

发布于 2025-01-10 23:23:10 字数 781 浏览 0 评论 0原文

我是熊猫新手。我有一个像这样的数据集:

df = pd.DataFrame({'Date':['10/2/2011', '11/2/2011', '12/2/2011', '13/2/2011'],
                'Event':['music.example.com', 'poetry.example.com', 'theatre.domain.com', 'comedy.domain.com'],
                'Cost':[10000, 5000, 15000, 2000]})

并且想添加“基域”列,以便我可以在基域而不是子域上执行聚合函数。在这个例子中,新列将有值

'baseDomain':['example.com', 'example.com', 'domain.com', 'domain.com'],

它不应该只是盲目地在“。”上拆分。所以可能应该使用类似 tld 的东西,尽管域不是 URL

========== 更新

使用了 adhg 和 Henry Ecker 解决方案,并这样做:

def get_base_domain(event):
    ext = tldextract.extract(event)
    return ext.domain + '.' + ext.suffix

df['baseDomain']  = df.apply(lambda x: get_base_domain(x['Event']), axis=1)

I new to pandas. I have a dataset like this one:

df = pd.DataFrame({'Date':['10/2/2011', '11/2/2011', '12/2/2011', '13/2/2011'],
                'Event':['music.example.com', 'poetry.example.com', 'theatre.domain.com', 'comedy.domain.com'],
                'Cost':[10000, 5000, 15000, 2000]})

And would like to add a column for "base domain" so I can do aggregate functions on base domain instead of subdomain. In this example there new column would have values

'baseDomain':['example.com', 'example.com', 'domain.com', 'domain.com'],

It should not just blindly split on the "." so should probably use something like tld although the domains are not as URLs

========== Update

Used adhg and Henry Ecker solution and did it like this:

def get_base_domain(event):
    ext = tldextract.extract(event)
    return ext.domain + '.' + ext.suffix

df['baseDomain']  = df.apply(lambda x: get_base_domain(x['Event']), axis=1)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凯凯我们等你回来 2025-01-17 23:23:10

你可以这样做:

def get_base_domain(event):
    return event[event.index('.')+1:]

df['baseDomain']  = df.apply(lambda x: get_base_domain(x['Event']), axis=1)

期望的结果:

         Date   Event               Cost     baseDomain
0   10/2/2011   music.example.com   10000   example.com
1   11/2/2011   poetry.example.com  5000    example.com
2   12/2/2011   theatre.domain.com  15000   domain.com
3   13/2/2011   comedy.domain.com   2000    domain.com

如果你有不干净的事件域数据,请调整get_base_domain

you can do this:

def get_base_domain(event):
    return event[event.index('.')+1:]

df['baseDomain']  = df.apply(lambda x: get_base_domain(x['Event']), axis=1)

desired result:

         Date   Event               Cost     baseDomain
0   10/2/2011   music.example.com   10000   example.com
1   11/2/2011   poetry.example.com  5000    example.com
2   12/2/2011   theatre.domain.com  15000   domain.com
3   13/2/2011   comedy.domain.com   2000    domain.com

adjust get_base_domain if you have unclean Event domain data

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文