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
我有一个数据框,其中包含多个产品的标志 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