【问题标题】:Pandas dataframe groupby more than one string from a column熊猫数据框按列中的多个字符串分组
【发布时间】:2019-11-01 05:56:19
【问题描述】:

一些示例数据集如下

  Name      Year        Item    sales_Amount1
  A1            1.2019  Badam     2
  A1.pre        1.2019  Badam     10
  A1.post       1.2019  carrot        8
  N1            1.2019  carrot        10
  A2            1.2019  Badam     10
  G             1.2019  Badam     20
  A3            2.2019  soap          3
  P             2.2019  soap      1

我按如下方式完成了基本分组。

sum_sales1 = df1.groupby(['Name','Year', 'Item']).agg({'sales_Amount1': 'sum'})

有没有办法按特定的刺来分组,例如... A1、A1.pre、A1.post 和 N1 应该分组在一起。 另一组是 A2 和 G。另一组是 A3 和 P。在“名称”列上组合字符串的规则大约有 15 条。是否可以通过列名上的字符串来整理它们?谢谢。

  G1 = A1, A1.pre, A1.post and N1
  G2 = A2 and G
  G3 = A3 and P

  Name        Year    Item  sales_Amount1
  G1          1.2019  Badam        12
  G1          1.2019  carrot       18
  G2          1.2019  Badam        30
  G3          1.2019  soap         4

【问题讨论】:

    标签: python-3.x dataframe sum pandas-groupby


    【解决方案1】:

    你可以编写一个自定义函数来应用Name->Group的映射

    def map_group(name):
        if name in ("A1", "A1.pre", "A1.post", "N1"):
            return "G1"
        if name in ("A2", "G"):
            return "G2"
        if name in ("A3", "P"):
            return "G3"
    
    sum_sales1 = (df1.assign(Name=df1["Name"].apply(map_group))
                  .groupby(['Name', 'Year', 'Item'])
                  .agg({'sales_Amount1': 'sum'})
                  .reset_index())
    sum_sales1
    Out[2]: 
      Name    Year    Item  sales_Amount1
    0   G1  1.2019   Badam             12
    1   G1  1.2019  carrot             18
    2   G2  1.2019   Badam             30
    3   G3  2.2019    soap              4
    

    【讨论】:

      猜你喜欢
      • 2016-05-17
      • 2015-06-25
      • 1970-01-01
      • 2020-02-19
      • 2019-03-14
      • 2022-07-27
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      相关资源
      最近更新 更多