groupby 操作后对 pandas 数据框行的计算
calculations on rows of pandas dataframe after groupby operation
我有销售数据,在对项目和年份添加 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
谢谢。
不是最好的方法,但你可以试试这个:
定义一个计算函数,并将其应用到你原来的 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
这会成功(假设您的数据按照您的示例排序,即按年份降序)
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
我有销售数据,在对项目和年份添加 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
谢谢。
不是最好的方法,但你可以试试这个:
定义一个计算函数,并将其应用到你原来的 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
这会成功(假设您的数据按照您的示例排序,即按年份降序)
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