我有销售数据,并在项目和年份上添加了groupby之后,数据集如下所示。我想用以下公式计算增长率
rate_of_increase =((2019年的销售额-2018年的销售额)/ 2018年的销售额)* 100
district item Year salesAmount
Arba coil 2019 300
2018 50
Arba pen 2019 30
2018 200
Arba hat 2019 30
2018 20
Cebu oil 2019 300
2018 500
Cebu pen 2019 120
2018 10
输出:
district item rate_increase(%)
Arba coil 500
Arba pen -85
Arba hat 50
Cebu oil -40
Cebu pen 1100
谢谢。
答案 0 :(得分:1)
不是最好的方法,但是您可以尝试以下方法:
定义用于计算的函数,并将其应用于原始df
def rate_of_increase(x):
amt_2019=x[x['Year']==2019]['salesAmount']
amt_2018=x[x['Year']==2018]['salesAmount']
rate_of_increase = ((int(amt_2019) -int(amt_2018)) / int(amt_2018)) * 100
return (rate_of_increase)
并应用于您的df
以创建新的数据框
df2=pd.DataFrame()
df2[['district' ,'item' ,'rate']]=df.groupby(['district', 'item']).apply(lambda x: rate_of_increase(x)).reset_index()
输出:
district item rate
0 Arba coil 500.0
1 Arba hat 50.0
2 Arba pen -85.0
3 Cebu oil -40.0
4 Cebu pen 1100.0
答案 1 :(得分:1)
这可以解决问题(假设您的数据按照示例进行排序,即按年份降序)
df=df.sort_values(by=['district', 'item','year'], ascending=False)
df["rate_increase"]=df.groupby(["district", "item"])["salesAmount"].diff().div(df["salesAmount"]).mul(-100)
df2=df.loc[df["year"].eq(2018)].drop(["year", "salesAmount"], axis=1).drop_duplicates().reset_index(drop=True)
输出:
district item rate_increase
0 Cebu pen 1100.0
1 Cebu oil -40.0
2 Arba pen -85.0
3 Arba hat 50.0
4 Arba coil 500.0