sfo*_*ney 8 python random group-by pandas
获取a元素的随机样本的最佳方法是groupby
什么?据我所知,a groupby
只是一个可迭代的群组.
如果我想选择N = 200
元素,我将为迭代执行此操作的标准方法是:
rand = random.sample(data, N)
Run Code Online (Sandbox Code Playgroud)
如果你尝试上面的数据是'分组',结果列表的元素由于某种原因是元组.
我找到了以下示例,用于随机选择单个键的元素groupby
,但这不适用于多键groupby
.从,如何按键访问pandas groupby dataframe
创建groupby对象
Run Code Online (Sandbox Code Playgroud)grouped = df.groupby('some_key')
选择N个数据帧并获取其索引
Run Code Online (Sandbox Code Playgroud)sampled_df_i = random.sample(grouped.indices, N)
使用groupby对象'get_group'方法获取组
Run Code Online (Sandbox Code Playgroud)df_list = map(lambda df_i: grouped.get_group(df_i),sampled_df_i)
可选 - 将其全部转换回单个数据框对象
Run Code Online (Sandbox Code Playgroud)sampled_df = pd.concat(df_list, axis=0, join='outer')
CT *_*Zhu 11
您可以获取唯一值的randoms样本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
Run Code Online (Sandbox Code Playgroud)
如果有多个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
Run Code Online (Sandbox Code Playgroud)
但是,如果你只想获得每个组的价值,你甚至不需要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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5978 次 |
最近记录: |