0

对于 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我想将每条记录与参考记录进行比较,并且我想计算组合的唯一数AB值。例如,我可以通过取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并且非常慢。任何人都可以建议一种矢量化方法来实现相同的目标吗?

4

1 回答 1

0

我将创建一个新列,在其中将 a 和 b 组合成一个元组,然后按分组,然后使用 groups = dict(list(groupby)),然后使用 len() 获取每个帧的长度

于 2015-02-20T06:33:26.790 回答