对于 DataFrame 中的每一行数据,我想计算列中唯一值的数量,A
以及B
该特定行和由另一列标识的组中的参考行ID
。这是一个玩具数据集:
d = {'ID' : pd.Series([1,1,1,2,2,2,2,3,3])
,'A' : pd.Series([1,2,3,4,5,6,7,8,9])
,'B' : pd.Series([1,2,3,4,11,12,13,14,15])
,'REFERENCE' : pd.Series([1,0,0,0,0,1,0,1,0])}
data = pd.DataFrame(d)
数据如下所示:
In [3]: data
Out[3]:
A B ID REFERENCE
0 1 1 1 1
1 2 2 1 0
2 3 3 1 0
3 4 4 2 0
4 5 11 2 0
5 6 12 2 1
6 7 13 2 0
7 8 14 3 1
8 9 15 3 0
现在,在使用定义的每个组中,ID
我想将每条记录与参考记录进行比较,并且我想计算组合的唯一数A
和B
值。例如,我可以通过取len(set([4,4,6,12]))
which 给出 3 来计算数据记录 3 的值。结果应如下所示:
A B ID REFERENCE CARDINALITY
0 1 1 1 1 1
1 2 2 1 0 2
2 3 3 1 0 2
3 4 4 2 0 3
4 5 11 2 0 4
5 6 12 2 1 2
6 7 13 2 0 4
7 8 14 3 1 2
8 9 15 3 0 3
我能想到实现这一点的唯一方法是使用循环遍历每个分组对象,然后循环分组对象中的每个记录,并根据参考记录计算它。这是非pythonic并且非常慢。任何人都可以建议一种矢量化方法来实现相同的目标吗?