我有时间序列数据,其中各列之间的相关性很强,并且缺少观测值。因此,我用现有的观察结果来填补空白。代码是有效的,但我以一种笨拙的方式在每个单元格中循环。有人能做这种肾盂造影吗?工作代码如下:
import numpy as np
import pandas as pd
df = pd.DataFrame()
df['A'] = [1,2,3,4,5,np.nan,7,8,9]
df['B'] = [7,9,np.nan,13,15,17,19,21,23]
df['C'] = [-5,0,5,10,np.nan,20,25,30,35]
print(df)
colstd = df.std(axis=0)
rowstd = df.std(axis=1)
colavg = df.mean(axis=0)
rowavg = df.mean(axis=1)
for idx , row in df.iterrows():
for col in df.columns:
if pd.isna(df.loc[idx][col]):
df.loc[idx][col] = colavg[col] + colstd[col] * np.nanmean((row - colavg)/colstd)
print(df)
您可以使用lambda函数尝试
DataFrame.apply
,其目的是避免数据帧的手动迭代,即iterrows()
:输出:
以下是执行的时间比较:
只需执行与向量运算相同的操作。也许有一个更简单的方法,我只是试着按照你的逻辑:
输出:
NB。我以前从未见过这种转变,你能详细介绍一下吗
如果你想用mean来填充,就用这个
相关问题 更多 >
编程相关推荐