您可以再次按age group分组,选择相关列,然后使用.last()获取组内churn==1对应的条目,.first()获取组内churn==0对应的条目团体。然后,将它们用于除法:
g = df.groupby('age group')[['salary', 'debt', 'investments']]
g.last() / g.first()
结果:
salary debt investments
age group
21-30 0.800000 0.666667 2.0
31-40 0.333333 0.800000 1.0
另一种方法:也可以在分组前按churn==1和churn==0进行过滤,如下:
g1 = df.loc[df['churn']==1].groupby('age group')[['salary', 'debt', 'investments']].first()
g0 = df.loc[df['churn']==0].groupby('age group')[['salary', 'debt', 'investments']].first()
g1 / g0
结果:
salary debt investments
age group
21-30 0.800000 0.666667 2.0
31-40 0.333333 0.800000 1.0
我们可以进一步微调到您想要的布局,如下:
df_out = ((g.last() / g.first())
.add_prefix('variation_')
.reset_index()
)
或者,对于替代方法,使用:
df_out = ((g1 / g0)
.add_prefix('variation_')
.reset_index()
)
结果:
print(df_out)
age group variation_salary variation_debt variation_investments
0 21-30 0.800000 0.666667 2.0
1 31-40 0.333333 0.800000 1.0