Python 使用where按索引从HDFStore中选择行

Python 使用where按索引从HDFStore中选择行,python,pandas,hdfstore,Python,Pandas,Hdfstore,我有一个带有用户ID的数据帧,它作为索引帧表存储在HDFStore中。在这个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[d

我有一个带有用户ID的数据帧,它作为索引帧表存储在HDFStore中。在这个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_表中执行的操作。根据和,我已完成以下操作:

1pct_actions = store.select('df_actions', where = pd.Term('index', 1pct_users.index))
这只是提供了一个空的数据帧。事实上,如果我复制并粘贴上一个文档中的示例,我也会得到一个空数据框。在最近的几年里,这个术语有什么变化吗?我在熊猫0.12上


我不喜欢任何特定的解决方案。只要我能从快速的df_id表的查找中获得hdfstore索引,然后直接从其他帧表中提取这些索引。

以下是在0.12中实现的方法。在0.13中,where可以是一个索引器,例如一个位置数组,因此这要容易得多,请参见使用where掩码选择[http://pandas.pydata.org/pandas-docs/dev/io.htmladvanced-queries],然后将第二个示例向下

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'])

完美答案。我误解了where参数的格式,并没有意识到它需要像坐标那个样构造。我假设它可能是一个松散的定义,如数组、列表等。。。感谢您的澄清。如果能够成为0.13中的列表/数组,我相信文档链接应该是。如果这是正确的,我将很高兴编辑答案中的链接。
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])
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()