Pandas groupby:如何按字符串的指定部分分组

Posted

技术标签:

【中文标题】Pandas groupby:如何按字符串的指定部分分组【英文标题】:Pandas groupby: How to group by a specified part of a string 【发布时间】:2021-09-16 11:41:49 【问题描述】:

我有一个这样的数据框(df):

| Category | Var1 | Var2 |
| -------- | ---- | ---- |
| Num1    | row  | row  |
| Num1    | row  | row  |
| Num1_    | row  | row  |
| Num1_    | row  | row  |
| Num2    | row  | row  |
| Num2    | row  | row  |
| Num2_    | row  | row  |
| Num2_    | row  | row  |
| Num0_   | row  | row  |
| Num0    | row  | row  |

如果我使用:

g = df.groupby('Category')

它创建一个 groupby 对象 g,其组由相等的 Category 确定。在这个例子中 Num1、Num1_、Num2、Num2_ Num0_ 和 Num0。

我只想按字符串的一部分进行分组。 例如将 Num1 和 Num1_ 放在一起,从而忽略 _

另外,有没有办法将 Num1 和 Num1_ 、 Num2 和 Num2_ 放在一起,但保持分开的 Num0_ 和 Num0

【问题讨论】:

【参考方案1】:

IIUC,这是一种方法:

第一部分:

df.groupby(df.Category.str.strip('_'))

第二部分:

df.groupby(df.Category.str.strip('_').map('Num1' : 0 , 'Num2' : 0, 'Num0' : 1))

注意:在第二部分中,您还可以将NUM2 替换为NUM1,反之亦然。

【讨论】:

嗨,第一部分就像一个魅力。至于第二个,我想我没有正确解释。我想有 4 个组: (Num1 和 Num1_ ) 、 (Num2 和 Num2_ ) 、 Num0 和 Num0_【参考方案2】:

我认为以下代码应该适用于第二部分: df.groupby(df.Category.replace('Num0_':'1').str.strip('_'))

【讨论】:

以上是关于Pandas groupby:如何按字符串的指定部分分组的主要内容,如果未能解决你的问题,请参考以下文章

group by用法

Pandas 按 groupby 求和,但不包括某些列

使用 pandas 在数据帧上执行 groupby,按计数排序并获取 python 中的前 2 个计数

应用 groupby 后从组中获取特定元素-PANDAS [重复]

带有冗余 nan 类别的 Pandas groupby

如何使用 Groupby 将 Pandas TA 应用于数据框