熊猫数据框按列中的多个字符串分组

时间:2019-11-01 05:56:19

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

一些示例数据集如下

  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

1 个答案:

答案 0 :(得分: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