你提供的四个数组 y0
, y1
, x0
, 和 x1
可以在单一轴上水平合并:
y = np.hstack((y0, y1))
x = np.concatenate((x0, x1)) # 两种方式效果相同
合并后,y
和 x
的值分别为:
([6, 7, 8, 9, 1, 2, 3, 4, 5]),
([600, 700, 800, 900, 0.1, 0.2, 0.3, 0.4, 0.5])
由于 x1
中包含浮点数,合并后的 x
数组会整体转换为浮点类型。
接着,找出如何对 y
值进行排序:
idx = y.argsort()
idx
是一个数组,表示 y
值从小到大排序后的原下标位置。
根据排序后的下标 idx
创建一个新的二维数组,数组中包含排序后的 y
和对应的 x
值,且数组中的数值都转换成了浮点型:
xy = np.stack((y[idx], x[idx]), axis=1)
生成的二维数组 xy
如下:
[[1.0, 0.1],
[2.0, 0.2],
[3.0, 0.3],
[4.0, 0.4],
[5.0, 0.5],
[6.0, 600.0],
[7.0, 700.0],
[8.0, 800.0],
[9.0, 900.0]]
然后,将此数组转换为Pandas的DataFrame,以便更好地展示数据:
import pandas as pd
df = pd.DataFrame(xy)
DataFrame 显示如下:
0 1
0 1.0 0.1
1 2.0 0.2
2 3.0 0.3
3 4.0 0.4
4 5.0 0.5
5 6.0 600.0
6 7.0 700.0
7 8.0 800.0
8 9.0 900.0
更好的做法是在创建DataFrame时将 y
和 x
分开定义列名:
df = pd.DataFrame({'y': y[idx], 'x': x[idx]})
这样DataFrame的结构更清晰:
y x
0 1 0.1
1 2 0.2
2 3 0.3
3 4 0.4
4 5 0.5
5 6 600.0
6 7 700.0
7 8 800.0
8 9 900.0
另外,若想保持 x
列中整数和浮点数的混合类型,可以在创建 x
数组时指定 dtype
为 object
:
x = np.concatenate((x0,x1), dtype=object)[idx]
这时,x
数组会以对象数组的形式保留整数和浮点数的混合:
[0.1, 0.2, 0.3, 0.4, 0.5, 600, 700, 800, 900], dtype=object)