基于pandas中的groupby映射添加新列
我有一个df,如下所示基于pandas中的groupby映射添加新列,pandas,pandas-groupby,Pandas,Pandas Groupby,我有一个df,如下所示 product bought_date number_of_sales A 2016 15 A 2017 10 A 2018 15 B 2016 20 B 2017 30 B 2018 20
product bought_date number_of_sales
A 2016 15
A 2017 10
A 2018 15
B 2016 20
B 2017 30
B 2018 20
C 2016 20
C 2017 30
C 2018 20
从上面我想添加一个名为cost_per_unit的列,如下所示
产品A的成本是100,B是500,C是200
d1 = {'A':100, 'B':500, 'C':'200'}
预期产出:
product bought_date number_of_sales cost_per_unit
A 2016 15 100
A 2017 10 100
A 2018 15 100
B 2016 20 500
B 2017 30 500
B 2018 20 500
C 2016 20 200
C 2017 30 200
C 2018 20 200
您可以尝试以下方法:
df['cost_per_unit'] = df.apply(lambda x: d1[x['product']], axis=1)
print(df)
product bought_date number_of_sales cost_per_unit
0 A 2016 15 100
1 A 2017 10 100
2 A 2018 15 100
3 B 2016 20 500
4 B 2017 30 500
5 B 2018 20 500
6 C 2016 20 200
7 C 2017 30 200
8 C 2018 20 200
不需要任何lambda函数。仅运行:
df['cost_per_unit'] = df['product'].map(d1)
附加说明:产品是功能的名称。你应该避免
列名“覆盖”现有函数或属性。
这是一个好习惯,它们应该有所不同,至少在char的情况下是这样。使用
df['cost\u per\u unit']=df['product'].map(d1)
哪个列名是现有函数?产品?功能的名称是产品。运行例如df.product()。这就是为什么您不能编写例如df.product.map(d1)的原因