代码之家  ›  专栏  ›  技术社区  ›  user9092346

汇总数据集并创建新变量

  •  0
  • user9092346  · 技术社区  · 5 年前

    我有一个数据集,它按国家、季度、部门、交易类型和值列出各个交易。我想根据前三个变量对其进行总结,但为其他两个变量创建新的列。数据集如下所示:

    Country   Quarter   Division    Type    Value
       A         1        Sales      A        50
       A         2        Sales      A       150
       A         3        Sales      B        20
       A         1        Sales      A       250
       A         2        Sales      B        50
       A         3        Sales      B        50
       A         2      Marketing    A        50
    

    现在,我想聚合数据,以获得作为新变量的按类型划分的事务数。按前三个变量分组的事务总数很容易:

    df.groupby(['Country', 'Quarter', 'Division'], as_index=False).agg({'Type':'count', 'Value':'sum'})
    

    但是,我希望我的新数据框架如下所示:

    Country   Quarter   Division    Type_A   Type_B     Value_A   Value_B
       A         1        Sales        2        0         300         0
       A         2        Sales        1        1         150        50
       A         3        Sales        0        2           0        70
       A         2      Marketing      1        0          50         0
    

    我该怎么做?

    1 回复  |  直到 5 年前
        1
  •  3
  •   jezrael    5 年前

    在后面指定列 groupby 有元组 agg 函数,用于具有聚合函数的新列名称,然后按 DataFrame.unstack 最后一次转换 MultiIndex 按列显示 map :

    df1 = (df.groupby(['Country', 'Quarter', 'Division', 'Type'])['Value']
             .agg([('Type','count'), ('Value','sum')])
             .unstack(fill_value=0))
    df1.columns = df1.columns.map('_'.join)
    df1 = df1.reset_index()
    print (df1)
      Country  Quarter   Division  Type_A  Type_B  Value_A  Value_B
    0       A        1      Sales       2       0      300        0
    1       A        2  Marketing       1       0       50        0
    2       A        2      Sales       1       1      150       50
    3       A        3      Sales       0       2        0       70