【问题标题】:Using pandas groupby to collapse rows into a single row?使用 pandas groupby 将行折叠成一行?
【发布时间】:2020-03-20 04:01:03
【问题描述】:

我有一个看起来像这样的 Pandas DataFrame 对象:

以前两行为例:

我想像这样将前两行转换为一行:

榆树水草帽 |卡其色 | XS/S, M,L

我得到的最接近的是:

products = products.groupby(['title', 'color'])['size'].apply(' '.join)
title               color      
ELM WATER SOMBRERO  BLUE           XS/S M/L
                    KHAKI          XS/S M/L
MYLA SWIM BOTTOM    BLACK          XS S M L
                    NEON PINK      XS S M L
                    TURQUOISE      XS S M L
MYLA SWIM TOP       NEON ORANGE    XS S M L
                    NEON YELLOW    XS S M L
                    WHITE          XS S M L
Name: size, dtype: object

这会正确连接尺寸,但不幸的是它会生成一系列表单(标题、颜色):joinedSizes 并且缺少尺寸标签。

我对 Pandas 有经验,但尽管阅读了互联网上的多个 groupby 教程,但我似乎无法破解这个,我非常感谢社区的一些帮助!

【问题讨论】:

标签: python pandas group-by pandas-groupby data-science


【解决方案1】:

尝试使用aggas_index=Falsegroupby

products = products.groupby(['title', 'color'], as_index=False)['size'].agg(' '.join)

【讨论】:

  • 我相信您需要在 groupby 结果上使用多列索引才能正常工作,即[['size']] 而不是['size']
  • @alkasm:它有效。我测试了它。让我们让 OP 在他的数据集上试试吧:)
  • 确实它应该使用与 OP 相同的格式。但是,如果您有两列(即删除颜色列),则单列选择器将不起作用(您将获得加入的列名)。多列选择器适用于这两种情况。老实说,我不知道为什么会发生这种情况哈哈
  • @alkasm:叫。我受到这些行为的打击,所以我知道。我想这可能是一个错误。但是,我在需要时将其用作怪癖:)
【解决方案2】:

哇,所以我想我所要做的就是调用 reset_index()。谢谢大家。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 2020-12-14
    • 2015-12-23
    • 2022-08-18
    • 1970-01-01
    相关资源
    最近更新 更多