gpt4 book ai didi

python - Pandas:在输出差异较大的地方添加新样本

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

我有一个包含两列的 pandas.DataFrame:xy。最初,x 均匀分布在一个范围内。 y 的计算方式为 y = some_function(x)

现在我想查看 y 后续值的差异,如果超出某个值,我想在相应的两个 x 值之间添加更多样本点。 x_new = (x1 + x2)/2.0

我为此目的编写了一个小函数,但是我缺少一个简单的方法吗?

def dense1(data):
data = data.sort_values(by='x')
dy = data['y'].diff()
dx = data['x'].diff()
i = np.abs(dy) > 0.1
new_x = data['x'][i] - dx[i]/2.0
return new_x

最佳答案

经过仔细检查,我们似乎可以避免其中的一个差异,从而稍微简化了它。

这会导致 NumPy 版本,就像这样 -

a = data.values
mask = np.abs(np.diff(a[:,1])) > 0.1
out_arr = ((a[1:,0] + a[:-1,0])/2.0)[mask]

这会转换为 pandas 版本,就像这样 -

mask = data['y'].diff().abs() > 0.1
out = ((data.x.shift(1) + data.x)/2.0)[mask]

示例运行 -

In [471]: np.random.seed(0)

In [472]: data = pd.DataFrame(np.random.rand(5,2), columns=(('x','y')))

In [473]: data = data.sort_values(by='x')
...: dy = data['y'].diff()
...: dx = data['x'].diff()
...: i = np.abs(dy) > 0.1
...: new_x = data['x'][i] - dx[i]/2.0
...:

In [474]: new_x
Out[474]:
3 0.430621
0 0.493200
1 0.575788
4 0.783213
Name: x, dtype: float64

In [476]: mask = data['y'].diff().abs() > 0.1
...: out = ((data.x.shift(1) + data.x)/2.0)[mask]
...:

In [477]: out
Out[477]:
3 0.430621
0 0.493200
1 0.575788
4 0.783213
Name: x, dtype: float64

关于python - Pandas:在输出差异较大的地方添加新样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46034530/

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