基于pandas中的groupby映射添加新列

基于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

我有一个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
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)的原因