python - 基于 Python 中前一行的值填充列的行的矢量化解决方案
问题描述
数据框:
df = pd.DataFrame({"X":[1,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan]})
print(df)
X
0 1.0
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
我想通过从前一行获取平方值并添加一个来填充 np.nan。
期望的输出:
X
0 1.0
1 2.0
2 5.0
3 26.0
4 677.0
5 458330.0
这可以通过一个 for 循环来完成:
for i in range(1,len(df)):
df["X"].iloc[i] = ((df["X"].iloc[i-1]) ** 2) + 1
但是寻找相同问题的矢量化解决方案
解决方案
不幸的是,向量化解决方案是有问题的,因为使用了先前的输出值。为了提高性能,使用numba:
@jit(nopython=True)
def f(a):
for i in range(1, a.shape[0]):
a[i] = a[i-1] ** 2 + 1
return a
df['X'] = f(df['X'].to_numpy())
print (df)
X
0 1.000000e+00
1 2.000000e+00
2 5.000000e+00
3 2.600000e+01
4 6.770000e+02
5 4.583300e+05
6 2.100664e+11
7 4.412789e+22
8 1.947270e+45
9 3.791862e+90
10 1.437822e+181
推荐阅读
- c# - 参数无效。在我的代码的 memorystream 行时出错。我将文件作为 jpeg 插入,但我不知道它为什么会失败
- printing - 从云端打印到办公室打印机
- javascript - Node Js、javascript、mysql,客户端看到/看不到什么?
- html - 使我的标题“固定”调整标题框的大小
- c - 如何使用浮点数进行超时?
- react-native - 标记数组不显示在mapview React native(Expo)上
- angularjs - UI - 使用不同的微服务 API 并将列表合并到网格视图中并允许用户对数据进行排序
- c# - 如何填充 DockPanel?
- python - 正则表达式:常量和变量字符混合的字符串
- java - 尝试获取集合时,Android Studio 不会重新设置 .collection 方法