gpt4 book ai didi

python - Pandas 数据帧矢量化采样

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:20 25 4
gpt4 key购买 nike

我有一个简单的 df 形成数据透视表:

    d = {'one' : ['A', 'B', 'B', 'C', 'C', 'C'], 'two' : [6., 5., 4., 3., 2., 1.],     'three' : [6., 5., 4., 3., 2., 1.], 'four' : [6., 5., 4., 3., 2., 1.]}
df = pd.DataFrame(d)
pivot = pd.pivot_table(df,index=['one','two'])

我想从生成的数据透视对象的“一”列中的每个不同元素中随机抽取 1 行。 (在此示例中,“A”将始终被采样,而“B”和“C”有更多选项。)我刚开始使用 0.18.0 版的 Pandas ,并且知道 .sample方法。我弄乱了 .groupby 方法应用这样的采样函数:

    grouped = pivot.groupby('one').apply(lambda x: x.sample(n=1, replace=False))

当我尝试对该主题进行变体时,我提出了一个 KeyError,所以我认为是时候对这个看似简单的问题提出一些新的观点了......

感谢您的帮助!

最佳答案

引发 KeyError 因为 'one' 不是 pivot 中的列而是索引的名称:

In [11]: pivot
Out[11]:
four three
one two
A 6.0 6.0 6.0
B 4.0 4.0 4.0
5.0 5.0 5.0
C 1.0 1.0 1.0
2.0 2.0 2.0
3.0 3.0 3.0

你必须使用级别参数:

In [12]: pivot.groupby(level='one').apply(lambda x: x.sample(n=1, replace=False))
Out[12]:
four three
one one two
A A 6.0 6.0 6.0
B B 4.0 4.0 4.0
C C 1.0 1.0 1.0

这不太正确,因为索引是重复的!使用 as_index=False 会稍微好一些:

In [13]: pivot.groupby(level='one', as_index=False).apply(lambda x: x.sample(n=1))
Out[13]:
four three
one two
0 A 6.0 6.0 6.0
1 B 4.0 4.0 4.0
2 C 2.0 2.0 2.0

注意:这每次都会选择一个随机的


作为替代方案,一个可能性能更高的变体(拉出一个子框架:

In [21]: df.iloc[[np.random.choice(x) for x in g.indices.values()]]
Out[21]:
four one three two
1 5.0 B 5.0 5.0
3 3.0 C 3.0 3.0
0 6.0 A 6.0 6.0

关于python - Pandas 数据帧矢量化采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37427919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com