一些示例数据集如下
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
答案 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