【问题标题】:Pandas groupby: How to group by a specified part of a stringPandas groupby:如何按字符串的指定部分分组
【发布时间】: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

【问题讨论】:

    标签: python pandas group-by pandas-groupby


    【解决方案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('_'))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      • 2018-01-07
      • 1970-01-01
      • 2019-09-28
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多