Groupby 和 Count Flags 作为 Pandas 中的索引

发布于 2025-01-09 10:14:52 字数 668 浏览 1 评论 0原文

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

I have a dataframe which has flags 0/1 for multiple products along with accounts and which zipcode they belong to. My Goal is to count the 1's in columns which have been created as flags.

    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

My expected output is in the following format

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

What might be the best way to get to this?
I have tried using pd.crosstab/groupby functions but max got to this

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

十六岁半 2025-01-16 10:14:52

首先,您可以 .groupby “Zip” 并对这些值求和以获得所需的数字:

>>> 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

First, you can .groupby "Zip" and sum those values to get the number you want:

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

Then, pd.melt the data by using "Zip" as id and extracting the values from both "A" and "B" (now the sum from your previous step) to place in your new dataframe:

>>> 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

You can also use both "Zip" and "Pro" as index columns if you want:

>>> df = df.set_index(["Zip", "Pro"])
           #acc
Zip   Pro      
12333 A       4
32123 A       3
12333 B       1
32123 B       2
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文