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

2024-04-25 06:33:12 发布

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

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

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

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

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

        lake
zip
10001   Huron
10002   Huron, Erie
10003   Erie, Superior

{cd3>要返回}下面的调用:

^{pr2}$

基本上,有没有什么好方法可以做到这一点,或者您基本上还是坚持使用dirty-loop-through-indexes方法?在


Tags: 数据方法距离特征zip地理汇总邮政编码
1条回答
网友
1楼 · 发布于 2024-04-25 06:33:12

选项1
str.splitexpand=True,后跟stack+groupby。这将返回组。在

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隐式地创建ohe,您可以将其转换为分组。在

^{pr2}$

相关问题 更多 >