假设我有一个pandas.DataFrame
叫df
。的列df
代表不同的个体,索引轴代表时间,因此(i,j)项是个体j对时间段i的观察,并且我们可以假定所有数据都是float
可能带有NaN
值的类型。
就我而言,我有大约14,000列和几百行。
pandas.corr
会把14,000 x 14,000的相关矩阵还给我,并且时间性能对我的应用程序来说很好。
但是我还想知道,对于每对个体(j_1,j_2),有多少非空观测值进入了相关性计算,因此我可以隔离遭受数据覆盖率差的相关单元。
我能想到的最好的方法如下:
not_null_locations = pandas.notnull(df).values.astype(int)
common_obs = pandas.DataFrame(not_null_locations.T.dot(not_null_locations),
columns=df.columns, index=df.columns)
内存占用量和速度开始出现问题。
有没有更快的方法来获得常见的观察结果pandas
?
您可以执行此操作,但需要进行Cythonize(否则速度会慢得多);但是,内存占用应该更好(这给出了nan观测值的数量,您给出了有效观测值的数量,但是很容易转换)
l = len(df.columns)
results = np.zeros((l,l))
mask = pd.isnull(df)
for i, ac in enumerate(df):
for j, bc in enumerate(df):
results[j,i] = (mask[i] & mask[j]).sum()
results = DataFrame(results,index=df.columns,columns=df.columns)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句