Python 3.x 数据帧分组由一列中的多个字符串组成

Python 3.x 数据帧分组由一列中的多个字符串组成,python-3.x,dataframe,sum,pandas-groupby,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

下面是一些示例数据集

  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

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

def map_组(名称):
如果名称出现在(“A1”、“A1.前”、“A1.后”、“N1”):
返回“G1”
如果名称出现在(“A2”、“G”):
返回“G2”
如果名称出现在(“A3”、“P”):
返回“G3”
sum_sales1=(df1.assign(Name=df1[“Name”]。apply(映射组))
.groupby(['Name','Year','Item']))
.agg({'sales_Amount1':'sum'))
.reset_index())
销售总额1
出[2]:
名称年份项目销售金额1
0 G1 1.2019巴丹12
1 G1 1.2019胡萝卜18
2 G2 1.2019巴丹30
3 G3 2.4