首页 > 解决方案 > 基于类别的聚合值

问题描述

我有一个像这样的数据框:

SK_ID_CURR  CREDIT_ACTIVE   CREDIT_DAY_OVERDUE

436084         Sold               0

436084         Active            951

436084         Sold               0

436084         Active             0

436084         Bad debt           0

436084         Active            936

436084         Active            951

我想为每个 CREDIT_ACTIVE 类别创建新列,并使用相应的 CREDIT_DAY_OVERDUE 值总和。

结果应如下所示:

SK_ID_CURR  CREDIT_ACTIVE_OD  CREDIT_BAD_DEBT_OD CREDIT_ACTIVE_SOLD_OD

436084       2838                 0                 0

标签: pythonpandasaggregatecategories

解决方案


使用groupby和聚合sum,最后重塑unstack

df = (df.groupby(['SK_ID_CURR','CREDIT_ACTIVE'])['CREDIT_DAY_OVERDUE']
        .sum()
        .unstack(fill_value=0))

或使用pivot_table

df = df.pivot_table(index='SK_ID_CURR',
                    columns='CREDIT_ACTIVE',
                    values='CREDIT_DAY_OVERDUE',
                    aggfunc='sum',
                    fill_value=0)

然后更改列名:

df.columns = ['CREDIT_{}_OD'.format(x.upper()) for x in df.columns]

最后从索引创建列:

df = df.reset_index()
print (df)
   SK_ID_CURR  CREDIT_ACTIVE_OD  CREDIT_BAD DEBT_OD  CREDIT_SOLD_OD
0      436084              2838                   0               0

推荐阅读