Groupby 和 Count Flags 作为 Pandas 中的索引

Groupby and Count Flags as indexes in Pandas

我有一个数据框,其中包含多个产品的标志 0/1 以及帐户和它们所属的邮政编码。我的目标是计算已创建为标志的列中的 1。

    Zip     acc     A   B
    32123   214124  1   0
    32123   124124  0   0
    32123   124124  1   1
    32123   124124  1   1
    12333   112424  1   1
    12333   123131  1   0
    12333   214135  1   0
    12333   123145  1   0

我的预期输出格式如下

Zip     Pro #acc
32123   A   3
        B   2
12333   A   4
        B   1

完成此操作的最佳方法是什么? 我试过使用 pd.crosstab/groupby 函数,但 max 达到了这个

g.groupby(['ZIP','A','B']).agg({'ACC':'count'})
c.set_index(['ZIP','A','B'])

Zip     A   B   acc
32123   0   0   1
12333   0   0   2

首先,您可以.groupby“压缩”并对这些值求和以获得您想要的数字:

>>> df = df.groupby("Zip").sum()
          acc  A  B
Zip                
12333  572835  4  1
32123  586496  3  2

然后,pd.melt 通过使用“Zip”作为 id 并从“A”和“B”中提取值(现在是上一步的总和)将数据放入新数据框中:

>>> df = df.reset_index().melt(id_vars=["Zip"], value_vars=["A", "B"], var_name="Pro", value_name="#acc")
     Zip Pro  #acc
0  12333   A     4
1  32123   A     3
2  12333   B     1
3  32123   B     2

如果需要,您也可以同时使用“Zip”和“Pro”作为索引列:

>>> df = df.set_index(["Zip", "Pro"])
           #acc
Zip   Pro      
12333 A       4
32123 A       3
12333 B       1
32123 B       2