【问题标题】:groupby comma-separated values in single DataFrame column python/pandas单个DataFrame列python / pandas中的groupby逗号分隔值
【发布时间】:2018-06-28 16:18:00
【问题描述】:

例如,假设我有一个 python pandas DataFrame,如下所示:

#  PERSON  THINGS
0  Joe     Candy Corn, Popsicles
1  Jane    Popsicles
2  John    Candy Corn, Ice Packs
3  Lefty   Ice Packs, Hot Dogs

我想使用 pandas groupby 功能来获得以下输出:

THINGS        COUNT
Candy Corn    2
Popsicles     2
Ice Packs     2
Hot Dogs      1

我大致了解以下groupby命令:

df.groupby(['THINGS']).count()

但输出不是单个项目,而是整个字符串。我想我明白为什么会这样,但我不清楚如何最好地解决问题以获得所需的输出而不是以下输出:

THINGS                  PERSON
Candy Corn, Ice Packs   1
Candy Corn, Popsicles   1
Ice Packs, Hot Dogs     1
Popsicles               1

pandas 有没有类似 SQL 中的 LIKE 的功能,还是我在考虑如何在 pandas 中做错?

感谢任何帮助。

【问题讨论】:

  • 分享你所写的内容会非常有用。
  • @HackSaw -- 我当然可以试试。你的意思是我要解决的更大的问题还是代码本身达到提出问题的程度(或其他问题?)我是新来的,想确保我理解这个问题(以及在哪里最好把它)。感谢您的评论。

标签: python pandas dataframe pandas-groupby


【解决方案1】:

通过拆分单词创建一个系列,并使用value_counts

In [292]: pd.Series(df.THINGS.str.cat(sep=', ').split(', ')).value_counts()
Out[292]:
Popsicles     2
Ice Packs     2
Candy Corn    2
Hot Dogs      1
dtype: int64

【讨论】:

    【解决方案2】:

    您需要将THINGS 除以, 并展平系列和计数值。

    pd.Series([item.strip() for sublist in df['THINGS'].str.split(',') for item in sublist]).value_counts()
    

    输出:

    Candy Corn    2
    Popsicles     2
    Ice Packs     2
    Hot Dogs      1
    dtype: int64
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      • 2018-07-27
      • 2020-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多