0

DataFrame 内のデータの各行について、列内の一意の値の数を計算し、その特定の行と、別の列で識別されるグループ内の参照行についてA計算したいと思います。おもちゃのデータセットは次のとおりです。BID

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を計算したいと考えています。たとえば、データ レコード 3 の値を計算するには、これを 3 にすると次のようになります。結果は次のようになります。ABlen(set([4,4,6,12]))

   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

これを実装する唯一の方法は、グループ化された各オブジェクトをループし、次にグループ化されたオブジェクト内の各レコードをループし、参照レコードに対して計算する for ループを使用することです。これは非 Pythonic であり、非常に遅いです。誰かが同じことを達成するためのベクトル化されたアプローチを提案できますか?

4

1 に答える 1

0

a と b を組み合わせてタプルにする新しい列を作成し、グループ化してから groups = dict(list(groupby)) を使用し、len() を使用して各フレームの長さを取得します

于 2015-02-20T06:33:26.790 に答える