Группа данных Pandas по нескольким строкам из столбца - PullRequest
0 голосов
/ 01 ноября 2019

пример набора данных выглядит следующим образом:

  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 должны быть сгруппированы вместе. Другой группой были бы А2 и G. Другой группой были бы А3 и П. В столбце «Имя» существует около 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 голосов
/ 01 ноября 2019

Вы можете написать пользовательскую функцию для применения сопоставления 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
...