用pandas函数代替下列语句: elif i>len(data2_0_time3)-4: data2_0_time3.loc[i,'speed_391_24']=0 data2_0_time3.loc[i,'speed_391_23']=0 data2_0_time3.loc[i,'speed_391_22']=0 k=0 r=len(data2_0_time3)-1-i for j in range(1,4): if np.isnan(data2_0_time3.iat[i-j,0])==False: data2_0_time3.loc[i,'speed_391_24']=data2_0_time3.iat[i,0]+data2_0_time3.iat[i-j,0] data2_0_time3.loc[i,'speed_391_23']=data2_0_time3.iat[i,1]+data2_0_time3.iat[i-j,1] data2_0_time3.loc[i,'speed_391_22']=data2_0_time3.iat[i,2]+data2_0_time3.iat[i-j,2] k=k+1 for j in range(1,r): if np.isnan(data2_0_time3.iat[i+j,0])==False: data2_0_time3.loc[i,'speed_391_24']=data2_0_time3.iat[i,0]+data2_0_time3.iat[i+j,0] data2_0_time3.loc[i,'speed_391_23']=data2_0_time3.iat[i,1]+data2_0_time3.iat[i+j,1] data2_0_time3.loc[i,'speed_391_22']=data2_0_time3.iat[i,2]+data2_0_time3.iat[i+j,2] k=k+1 data2_0_time3.loc[i,'speed_391_24']=data2_0_time3.iat[i,0]/k data2_0_time3.loc[i,'speed_391_23']=data2_0_time3.iat[i,1]/k data2_0_time3.loc[i,'speed_391_22']=data2_0_time3.iat[i,2]/k
时间: 2023-06-08 12:08:23 浏览: 72
使用pandas的rolling函数可以代替原始代码中的for循环,通过计算指定区间内的均值来完成相同的功能,具体代码如下:
```python
data2_0_time3['speed_391_24'] = data2_0_time3.iloc[:,0].rolling(window=4, min_periods=1).mean()
data2_0_time3['speed_391_23'] = data2_0_time3.iloc[:,1].rolling(window=4, min_periods=1).mean()
data2_0_time3['speed_391_22'] = data2_0_time3.iloc[:,2].rolling(window=4, min_periods=1).mean()
```
其中,rolling函数中的参数window指定了滑动窗口的大小,min_periods指定了有效数据的最小数目。由于rolling的均值计算默认是包括当前值的,所以在数据较短时需要指定min_periods参数。
相关问题
用pandas函数代替下列语句:for i in range(len(data2_0_time3)): if (np.isnan(data2_0_time3.iat[i,0])==True): if 3<=i<=len(data2_0_time3)-4: data2_0_time3.loc[i,'speed_391_24']=0 data2_0_time3.loc[i,'speed_391_23']=0 data2_0_time3.loc[i,'speed_391_22']=0 k=0 for j in range(1,4): if np.isnan(data2_0_time3.iat[i-j,0])==False: data2_0_time3.loc[i,'speed_391_24']=data2_0_time3.iat[i,0]+data2_0_time3.iat[i-j,0] data2_0_time3.loc[i,'speed_391_23']=data2_0_time3.iat[i,1]+data2_0_time3.iat[i-j,1] data2_0_time3.loc[i,'speed_391_22']=data2_0_time3.iat[i,2]+data2_0_time3.iat[i-j,2] k=k+1 if np.isnan(data2_0_time3.iat[i+j,0])==False: data2_0_time3.loc[i,'speed_391_24']=data2_0_time3.iat[i,0]+data2_0_time3.iat[i+j,0] data2_0_time3.loc[i,'speed_391_23']=data2_0_time3.iat[i,1]+data2_0_time3.iat[i+j,1] data2_0_time3.loc[i,'speed_391_22']=data2_0_time3.iat[i,2]+data2_0_time3.iat[i+j,2] k=k+1 data2_0_time3.loc[i,'speed_391_24']=data2_0_time3.iat[i,0]/k data2_0_time3.loc[i,'speed_391_23']=data2_0_time3.iat[i,1]/k data2_0_time3.loc[i,'speed_391_22']=data2_0_time3.iat[i,2]/k
data2_0_time3['speed_391_24'] = np.where((pd.isnull(data2_0_time3.iloc[:,0])) & (data2_0_time3.index>=3) & (data2_0_time3.index<=len(data2_0_time3)-4), 0, data2_0_time3['speed_391_24'])
data2_0_time3['speed_391_23'] = np.where((pd.isnull(data2_0_time3.iloc[:,0])) & (data2_0_time3.index>=3) & (data2_0_time3.index<=len(data2_0_time3)-4), 0, data2_0_time3['speed_391_23'])
data2_0_time3['speed_391_22'] = np.where((pd.isnull(data2_0_time3.iloc[:,0])) & (data2_0_time3.index>=3) & (data2_0_time3.index<=len(data2_0_time3)-4), 0, data2_0_time3['speed_391_22'])
for i in range(3, len(data2_0_time3)-3):
if pd.isnull(data2_0_time3.iloc[i,0]):
k = 0
for j in range(1, 4):
if not pd.isnull(data2_0_time3.iloc[i-j,0]):
data2_0_time3.iloc[i, 0] += data2_0_time3.iloc[i-j, 0]
data2_0_time3.iloc[i, 1] += data2_0_time3.iloc[i-j, 1]
data2_0_time3.iloc[i, 2] += data2_0_time3.iloc[i-j, 2]
k += 1
if not pd.isnull(data2_0_time3.iloc[i+j,0]):
data2_0_time3.iat[i,0] += data2_0_time3.iloc[i+j,0]
data2_0_time3.iat[i,1] += data2_0_time3.iloc[i+j,1]
data2_0_time3.iat[i,2] += data2_0_time3.iloc[i+j,2]
k += 1
data2_0_time3.iloc[i,0] /= k
data2_0_time3.iloc[i,1] /= k
data2_0_time3.iloc[i,2] /= k
用pandas函数代替下列语句: data2_0_time3.loc[i,'speed_391_24']=0 data2_0_time3.loc[i,'speed_391_23']=0 data2_0_time3.loc[i,'speed_391_22']=0 k=0 r=len(data2_0_time3)-1-i for j in range(1,4): if np.isnan(data2_0_time3.iat[i-j,0])==False: data2_0_time3.loc[i,'speed_391_24']=data2_0_time3.iat[i,0]+data2_0_time3.iat[i-j,0] data2_0_time3.loc[i,'speed_391_23']=data2_0_time3.iat[i,1]+data2_0_time3.iat[i-j,1] data2_0_time3.loc[i,'speed_391_22']=data2_0_time3.iat[i,2]+data2_0_time3.iat[i-j,2] k=k+1 for j in range(1,r): if np.isnan(data2_0_time3.iat[i+j,0])==False: data2_0_time3.loc[i,'speed_391_24']=data2_0_time3.iat[i,0]+data2_0_time3.iat[i+j,0] data2_0_time3.loc[i,'speed_391_23']=data2_0_time3.iat[i,1]+data2_0_time3.iat[i+j,1] data2_0_time3.loc[i,'speed_391_22']=data2_0_time3.iat[i,2]+data2_0_time3.iat[i+j,2] k=k+1 data2_0_time3.loc[i,'speed_391_24']=data2_0_time3.iat[i,0]/k data2_0_time3.loc[i,'speed_391_23']=data2_0_time3.iat[i,1]/k data2_0_time3.loc[i,'speed_391_22']=data2_0_time3.iat[i,2]/k
可以使用以下代码来代替原先的语句:
```
data2_0_time3.loc[i,['speed_391_24','speed_391_23','speed_391_22']] = 0
k = 0
r = len(data2_0_time3) - 1 - i
for j in range(1, 4):
if not np.isnan(data2_0_time3.iloc[i-j, 0]):
data2_0_time3.loc[i,['speed_391_24','speed_391_23','speed_391_22']] += data2_0_time3.iloc[i-j:i-j+1,:3]
k += 1
for j in range(1, r):
if not np.isnan(data2_0_time3.iloc[i+j, 0]):
data2_0_time3.loc[i,['speed_391_24','speed_391_23','speed_391_22']] += data2_0_time3.iloc[i+j:i+j+1,:3]
k += 1
data2_0_time3.loc[i,['speed_391_24','speed_391_23','speed_391_22']] /= k
```
这段代码使用了 `loc` 和 `iloc` 方法来进行索引和赋值,对于 `iloc` 方式,可以直接通过整数索引进行数据访问。使用了逻辑判断 `not np.isnan` 来判断指定位置的值是否为 NaN,并在判断为 True 时累计计算其它行的数值。最后将累计值除以 k 得到平均值,再使用 `/=` 符号将计算结果重新赋值给 `data2_0_time3` 中指定的行和列。
相关推荐
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)