Python Pandas从Groupby中选择组的随机样本

福特尼

随机获取a的元素的最佳方法是groupby什么?据我了解,agroupby只是在各个组之间迭代。

如果要选择N = 200元素,我将进行迭代的标准方法是:

rand = random.sample(data, N)  

如果您在数据被“分组”的情况下尝试上述操作,则由于某些原因,结果列表的元素为元组。

我发现下面的示例用于随机选择单个键的元素groupby,但是不适用于多键groupby从,如何按键访问熊猫分组依据数据帧

创建分组对象

grouped = df.groupby('some_key')

选择N个数据框并获取其索引

sampled_df_i = random.sample(grouped.indices, N)

使用groupby对象的“ get_group”方法获取组

df_list = map(lambda df_i: grouped.get_group(df_i),sampled_df_i)

可选-将所有内容重新转换为单个dataframe对象

sampled_df = pd.concat(df_list, axis=0, join='outer')
CT Zhu

您可以对的唯一值进行随机抽样,将其df.some_key.unique()用于对进行切片df,最后groupby对结果进行切片

In [337]:

df = pd.DataFrame({'some_key': [0,1,2,3,0,1,2,3,0,1,2,3],
                   'val':      [1,2,3,4,1,5,1,5,1,6,7,8]})
In [338]:

print df[df.some_key.isin(random.sample(df.some_key.unique(),2))].groupby('some_key').mean()
               val
some_key          
0         1.000000
2         3.666667

如果有多个groupby键:

In [358]:

df = pd.DataFrame({'some_key1':[0,1,2,3,0,1,2,3,0,1,2,3],
                   'some_key2':[0,0,0,0,1,1,1,1,2,2,2,2],
                   'val':      [1,2,3,4,1,5,1,5,1,6,7,8]})
In [359]:

gby = df.groupby(['some_key1', 'some_key2'])
In [360]:

print gby.mean().ix[random.sample(gby.indices.keys(),2)]
                     val
some_key1 some_key2     
1         1            5
3         2            8

但是,如果您只是要获取每个组的值,则甚至不需要groubpy,它MultiIndex会做:

In [372]:

idx = random.sample(set(pd.MultiIndex.from_product((df.some_key1, df.some_key2)).tolist()),
                    2)
print df.set_index(['some_key1', 'some_key2']).ix[idx]
                     val
some_key1 some_key2     
2         0            3
3         1            5

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章