大熊猫根据不同列的集合进行计数

时间:2018-12-05 13:31:03

标签: python pandas group-by aggregate

假设我们有一个如下所示的df:

    A   B
0   a   101
1   b   101
2   a   101
3   d   101
4   c   102
5   a   102
6   b   102
7   b   102
8   b   102

现在,我要创建的df的大小为A的唯一值的大小乘以B + 1上的#的唯一值的大小。在这种情况下,它将是4x3,并用B中的组中A中的元素如下:

    item 101 102
0   a     2   1
1   b     1   3
2   c     0   1
3   d     1   0

我知道R中有一种方法,但是我需要在python中完成。我已经通过某种计数循环来做到这一点,但这不是优雅的方法,也不是pythonic。

那么,我该如何通过groupby和汇总或任何其他想法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

使用crosstab

import pandas as pd

data = [['a',   101],
['b',   101],
['a',   101],
['d',   101],
['c',   102],
['a',   102],
['b',   102],
['b',   102],
['b',   102]]

df = pd.DataFrame(data=data, columns=['A', 'B'])

result = pd.crosstab(df.A, df.B)
print(result.reset_index())

输出

B  A  101  102
0  a    2    1
1  b    1    3
2  c    0    1
3  d    1    0