gpt4 book ai didi

numpy - 从 pandas.DataFrame 绘制引导样本

转载 作者:行者123 更新时间:2023-12-03 13:01:54 25 4
gpt4 key购买 nike

我想绘制一个 pandas.DataFrame 的引导样本尽可能高效。使用内置 iloc连同整数列表似乎很慢:

import pandas
import numpy as np
# Generate some data
n = 5000
values = np.random.uniform(size=(n, 5))
# Construct a pandas.DataFrame
columns = ['a', 'b', 'c', 'd', 'e']
df = pandas.DataFrame(values, columns=columns)
# Bootstrap
%timeit df.iloc[np.random.randint(n, size=n)]
# Out: 1000 loops, best of 3: 1.46 ms per loop

索引 numpy数组当然要快得多:
%timeit values[np.random.randint(n, size=n)]
# Out: 10000 loops, best of 3: 159 µs per loop

但即使提取值,采样 numpy数组,并构造一个新的 pandas.DataFrame是比较快的:
%timeit pandas.DataFrame(df.values[np.random.randint(n, size=n)], columns=columns)
# Out: 1000 loops, best of 3: 302 µs per loop

@JohnE 建议 sample不幸的是,它甚至更慢:
%timeit df.sample(n, replace=True)
# Out: 100 loops, best of 3: 5.14 ms per loop

@firelynx 建议 merge :
%timeit df.merge(pandas.DataFrame(index=np.random.randint(n, size=n)), left_index=True, right_index=True, how='right')
# Out: 1000 loops, best of 3: 1.23 ms per loop

有谁知道为什么 iloc太慢和/或是否有比提取值、采样然后构建新 pandas.DataFrame 更好的选择?

最佳答案

pandas 中的合并方法相当优化,所以我用它试试运气,它给了我显着的速度提升。鉴于我的机器比你的慢一点,我也在使用 Pandas 0.15.2 事情可能有点不同。

%timeit df.iloc[np.random.randint(n, size=n)]
# 100 loops, best of 3: 2.41 ms per loop

randlist = pandas.DataFrame(index=np.random.randint(n, size=n))
%timeit df.merge(randlist, left_index=True, right_index=True, how='right')
# 1000 loops, best of 3: 1.87 ms per loop

%timeit df.merge(pandas.DataFrame(index=np.random.randint(n, size=n)), left_index=True, right_index=True, how='right')
# 100 loops, best of 3: 2.29 ms per loop

关于numpy - 从 pandas.DataFrame 绘制引导样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31502958/

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