首页 > 解决方案 > Pandas Excel groupby/count

问题描述

嗨,我正在尝试让我的脚本计算它在指定列中看到相同单词的次数,其中一些列有多个用逗号分隔。

例如 -

Labels                        Labs
a1, b3                         1
a2                             3
b3                             1

我想要两个输出。

Labels  # of labels
a1           1
b3           2


Labels       Lab1     Lab3
a1            1        0
a2            0        1
b3            2        0

我试图使用 groupby 来计数,但我在 excel 中得到的唯一输出如下,我无法知道它们属于什么

20
2
1
7
7

我一直在玩这个,但一直得到上​​面显示的相同结果

df1 = df.groupby('Labs').count()

标签: pythonpandas

解决方案


钥匙

  1. 首先将逗号分隔的字符串转换为列表。
  2. 使用df.explode()展开条目。
  3. 可以通过df.pivot_table()实现透视聚合(组大小所属的概念) 。

设置

df = pd.read_csv(io.StringIO("""
Labels                        Labs
a1, b3                         1
a2                             3
b3                             1
"""), sep=r"\s{2,}", engine="python")

# split string into list (assume consistent separator pattern)    
df["Labels"] = df["Labels"].str.split(", ")

第一个输出:

df.explode("Labels").groupby("Labels").size()

Out[69]:
Labels
a1    1
a2    1
b3    2
dtype: int64

第二个输出:

df.explode("Labels").pivot_table(index="Labels", columns="Labs", aggfunc="size")\
    .fillna(0).astype(int)

Out[70]: 
Labs    1  3
Labels      
a1      1  0
a2      0  1
b3      2  0

推荐阅读