代码之家  ›  专栏  ›  技术社区  ›  Baktaawar David Maust

在pandas数据框中将行折叠为一个列值

  •  0
  • Baktaawar David Maust  · 技术社区  · 7 年前

    如果我有一个这样的数据框,每个用户id都有不同的产品页,我想将用户的所有产品页用连字符分隔在一起

    enter image description here

    我希望最终结果如下

    enter image description here

    在pandas或sql中这样做容易吗?我的数据集目前是7.5毫米行,如果用于更多数据,它将增长到1000万行。

    在pandas中,我们可以使用series.str.concatenate方法通过连字符折叠和连接吗?

    在SQL建议中?

    2 回复  |  直到 7 年前
        1
  •  0
  •   Tim    7 年前

    在熊猫中,你可以使用 groupby 使用匿名函数:

    >>> df = pd.DataFrame([(5, 'product'), (5, 'product'), (5, 'home'), (4, 'product'), (4, 'home')], columns=['user_id', 'page_category'])
    >>> df
        user_id page_category
     0        5       product
     1        5       product
     2        5          home
     3        4       product
     4        4          home
    >>> df.groupby('user_id')['page_category'].apply(lambda x: '-'.join(x))
     user_id
     4            product-home
     5    product-product-home
     Name: page_category, dtype: object
    
        2
  •  0
  •   Acccumulation    7 年前

    如果您所说的“更简单”是指“更快”,请记住sql是一个数据库接口,而不是数据库本身。在数据库中执行此操作的速度取决于其体系结构。