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:如何按字符串的指定部分分组的主要内容,如果未能解决你的问题,请参考以下文章
使用 pandas 在数据帧上执行 groupby,按计数排序并获取 python 中的前 2 个计数