1

パンダのパイソンの新機能。

2 列の cusips を持つデータフレーム (df) があります。これらの列を、2 つの列の一意のエントリのリストに変換したいと考えています。

私の最初の試みは、次のことをすることでした:

cusips = pd.concat(df['long'], df['short'])。

これによりエラーが返されました: 複数の要素を持つ配列の真の値があいまいです。a.any() または a.all() を使用します。

いくつかの投稿を読みましたが、なぜこれが出てくるのか、まだ問題があります。ここで何が欠けていますか?

また、列またはデータフレームで一意のエントリを選択する最も効率的な方法は何ですか? 1つの関数で呼び出すことはできますか? リストまたは新しい 1 列のデータフレームを作成する場合、関数は異なりますか?

ありがとうございました。

4

2 に答える 2

1

ヘイデンの答えに加えてset()、同じ結果を得るためにこの方法を使用することもできます。それを考慮すると、パフォーマンスはわずかに向上します。

In [28]: %timeit set(np.append(df[0],df[1]))
100000 loops, best of 3: 19.6 us per loop

In [29]: %timeit np.append(df[0].unique(), df[1].unique())
10000 loops, best of 3: 55 us per loop
于 2013-01-02T16:01:16.067 に答える
1

列の一意の値を取得するには、 Series メソッドを使用できますunique。これは、一意の値の numpy 配列を返します(しかも高速です!)

df.long.unique()
# returns numpy array of unique values

次に使用できますnumpy.append

np.append(df.long.unique(), df.short.unique())

注: これは 2 つの一意の結果を追加するだけなので、それ自体は一意ではありません。

.

(簡単な)例を次に示します。

import pandas as pd
import numpy as np
df = pd.DataFrame([[1, 2], [1, 4]], columns=['long','short'])

In [4]: df
Out[4]: 
   long  short
0     1      2
1     1      4

In [5]: df.long.unique()
Out[5]: array([1])

In [6]: df.short.unique()
Out[6]: array([2, 4])

そして、結果の 2 つの配列を追加します

In [7]: np.append(df.long.unique(), df.short.unique())
Out[7]: array([1, 2, 4])

@Zalazny7 を使用すると (配列に対して 1 回だけ実行されるため) 大幅に高速になり、 (結果の配列を並べ替える!)setよりもさらに高速です。np.unique

于 2013-01-02T15:52:26.043 に答える