首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >元素属于多个类别时按类别分组

元素属于多个类别时按类别分组
EN

Stack Overflow用户
提问于 2017-10-23 21:56:04
回答 1查看 603关注 0票数 2

我有一个由一组邮政编码索引的数据集合。我想根据邻近的另一组地理特征,比方说,到附近湖泊的距离来汇总这些数据。

它很简单,比方说,在一个数据中遍历每个湖,并应用一个haversine函数返回50英里内的所有邮政编码。反之亦然;我可以轻松地遍历所有的邮政编码,并在所述邮政编码的50英里范围内为每个湖返回一个列表。

但我想做得更有效率一点。如果每个zip只对应于一个湖,比如说最近的一个湖,那么简单的方法就是创建一个新的"lake"列,然后应用groupby("lake")来接收被绑定的数据以进行处理。

我想要的是一种自动复制组之前的行的技术。假设我有以下数据:

代码语言:javascript
复制
        lake
zip
10001   Huron
10002   Huron, Erie
10003   Erie, Superior

我想调用groupby返回以下内容:

代码语言:javascript
复制
group 'Huron'
zip
10001
10002

group 'Erie'
zip
10002
10003

group 'Superior'
zip
10003

基本上,有什么很好的方法来做到这一点,或者你实际上是被脏循环通过索引方法困住了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-23 22:11:22

选项1

str.splitexpand=True,然后是stack + groupby。这将返回组。

代码语言:javascript
复制
g = df.lake.str.split(',\s*', expand=True).stack()\
           .to_frame(name='lake').reset_index(level=1, drop=1).groupby('lake')

for i, k in g:
    print(k, '\n')

       lake
zip        
10002  Erie
10003  Erie 

        lake
zip         
10001  Huron
10002  Huron 

           lake
zip            
10003  Superior 

选项2

str.get_dummies,我最喜欢的方法。这不会在组中返回结果,但是get_dummies隐式地创建OHEs,您可以将其转换为分组。

代码语言:javascript
复制
g = df.lake.str.get_dummies(sep=r', ')

for c in g.columns:
     print('{}: {}'.format(c, g[c][g[c] > 0].index.tolist()))

Erie: [10002, 10003]
Huron: [10001, 10002]
Superior: [10003]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46899145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档