我正在寻求帮助,使用类似 np.nansum 的函数从现有数据帧创建子数据帧。我想将此表转换为非空列和的矩阵:
dan ste bob
t1 na 2 na
t2 2 na 1
t3 2 1 na
t4 1 na 2
t5 na 1 2
t6 2 1 na
t7 1 na 2
例如,当 'dan' 不为空 (t-2,3,4,6,7) 时,'ste' 的总和为 2,'bob' 为 5。当 'ste' 不为空时,'ste' 的总和为‘段’是4。
dan ste bob
dan 0 2 5
ste 4 0 2
bob 4 1 0
有任何想法吗?
提前致谢!
我最终使用了下面 matt 函数的修改版本:
def nansum_matrix_create(df):
rows = []
for col in list(df.columns.values):
col_sums = df[df[col] != 0].sum()
rows.append(col_sums)
return pd.DataFrame(rows, columns=df.columns, index=df.columns)
- Use
pd.DataFrame.notnull
到达非空值所在的位置。
- 然后使用
pd.DataFrame.dot
获取交叉表。
- 最后,使用
np.eye
将对角线归零。
df.notnull().T.dot(df.fillna(0)) * (1 - np.eye(df.shape[1]))
dan ste bob
dan 0.0 2.0 5.0
ste 4.0 0.0 2.0
bob 4.0 1.0 0.0
Note:
我用它来确保我的值是数字。
df = df.apply(pd.to_numeric, errors='coerce')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)