1

HDFStore にインデックス付きの frame_table として格納されている user_ids を持つデータ フレームがあります。また、この HDF ファイルには、ユーザーが実行したアクションを含む別のテーブルがあります。1% のユーザーが行ったすべてのアクションを取得したいと考えています。手順は次のとおりです。

#Get 1% of the user IDs
df_id = store.select('df_user_id', columns = ['id'])
1pct_users = rnd.sample(df_id.id.unique(), 0.01*len(df_id.id.unique()))
df_id = df_id[df_id.id.isin(1pct_users)]

ここで、戻って、df_user_id として同じインデックスが付けられた frame_tables から、これらのユーザーが実行したアクションを説明するすべての追加情報を取得したいと考えています。この例この質問に従って、私は次のことを行いました:

1pct_actions = store.select('df_actions', where = pd.Term('index', 1pct_users.index))

これは単に空のデータ フレームを提供します。実際、前の pandas docリンクの例をコピーして貼り付けると、空のデータ フレームも取得されます。Term最近のパンダで何か変わった?私はパンダ0.12を使用しています。

私は特定の解決策に縛られていません。df_id テーブル (高速) のルックアップから hdfstore インデックスを取得し、それらのインデックスを他のフレーム テーブルから直接取得できる限り。

4

1 に答える 1

3

これが 0.12 でのやり方です。0.13 では、where をインデクサーにすることができます (たとえば、場所の配列なので、これははるかに簡単です。(where マスクを使用した選択) を参照してください)[http://pandas.pydata.org/pandas-docs/dev/io.html#高度なクエリ]、次に 2 番目の例をダウンします。

In [2]: df = DataFrame(dict(A=list(range(5)),B=list(range(5))))

In [3]: df
Out[3]: 
   A  B
0  0  0
1  1  1
2  2  2
3  3  3
4  4  4

In [4]: store = pd.HDFStore('test.h5',mode='w')

In [5]: store.append('df',df)

いくつかの場所に従って、座標オブジェクト(ラップされた位置配列のみ)を選択して返します

In [6]: c = store.select_as_coordinates('df', ['index<3'])

Coordinate オブジェクトを受け入れる場所 (およびそれらを任意のテーブルで使用できます。ここでは「df_action」テーブルになります)

In [7]: store.select('df', where=c)
Out[7]: 
   A  B
0  0  0
1  1  1
2  2  2

In [8]: c
Out[8]: <pandas.io.pytables.Coordinates at 0x4669590>

In [9]: c.values
Out[9]: array([0, 1, 2])

これを操作したい場合は、必要な位置を Coordinate オブジェクトに割り当ててから に渡しselectます。(上で述べたように、この「ハック」は 0.13 でなくなり、この中間オブジェクトは必要ありません)

In [8]: c.values = np.array([0,1])

In [9]: store.select('df', where=c)
Out[9]: 
   A  B
0  0  0
1  1  1

store.close()
于 2013-09-10T22:39:38.467 に答える