0

重複を含む可能性のあるデータセットがあります。データセット内の重複を見つけるために、インデックスをnumpy構造化配列に入れ、配列を並べ替え、一意の値から別の配列を作成してから、2つの配列の長さを比較します。

data = np.zeros(t_len, dtype={'names':['date', 'symbol'], 'formats':['i8', 'S16']})
data[:] = [(x['date'], x['symbol']) for x in tbl.iterrows()]
data.sort(order=['date', 'symbol'])
data2 = np.unique(data)
duplicates = False

if len(data) != len(data2):
    duplicates = True
    print "There are duplicates"

if not duplicates:
    print "No duplicates found"

さて、私が本当にやりたいのは、重複を含むインデックスを決定することです。たとえば、次のようなデータセットがある場合:

array([12322323,'IBM'], [12322323,'IBM'], [12322323,'MSFT'], [12322323,'IBM'])

array([12322323、'IBM'])の配列を見たいのですが

独自の関数と差分関数の使用を検討しましたが、それらは機能していないようです。

4

1 に答える 1

2

x簡単にするために、入力として整数の配列 を使用します。

>>> x = np.array([20, 10, 30, 10, 60, 30, 10])

numpy バ​​ージョン 1.9.0 以降では、各一意の要素の出現回数も返されるようにnp.unique、引数を使用して一意の要素を取得するために使用できます。return_counts=True

>>> u, counts = np.unique(x, return_counts=True)

numpy の古いバージョンではnp.unique、引数を使用して、一意の要素の配列return_inverse=Trueから再作成する方法を示す配列を取得することもできます。x

>>> u, inv = np.unique(x, return_inverse=True)
>>> u
array([10, 20, 30, 60])
>>> inv
array([1, 0, 2, 0, 3, 2, 0])

bincount次に、各要素の出現回数をカウントするために使用します。

>>> counts = np.bincount(inv)
>>> counts
array([3, 1, 2, 1])

これcountsで、各要素が配列内で何回出現するかがわかります。次のように、重複する要素を引き出すことができます。

>>> dups = u[counts > 1]
>>> dups
array([10, 30])
于 2012-09-27T04:38:53.703 に答える