假设我们有一个如下所示的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和汇总或任何其他想法来实现这一目标?
答案 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