pandas 中的 maskind 数据框元素
maskind dataframe elements in pandas
我有一个方阵作为数据框,我想将对角线上方的所有值投影到一个系列中。我的想法是屏蔽对角线下方的所有元素,然后将数据帧转储到一个系列中,但它也会转储 NaN 值。这是示例:
users=[1,2,3,4,5]
cols=range(1,6)
matrix=pd.DataFrame(np.random.randn(len(users),len(cols)), index=users,columns=cols)
mask = np.ones(matrix.shape,dtype='bool')
mask[np.triu_indices(len(matrix))] = False
series=matrix.mask(mask).values.ravel()
在该系列中,我得到了所有上三角角值以及对应于下三角角的所有 NaN 值。显然我理解错了:我明白通过屏蔽数据框中的某些元素将不会使用被屏蔽的元素。有人知道我该怎么做吗?
选项 1
使用 pd.DataFrame.stack
,因为它会为您转储 np.nan
。
matrix.mask(mask).stack().values
array([ 0.6022148 , -0.19275783, -0.54066832, 1.95690678, 0.23993172,
0.27107843, 2.29409865, -0.70446894, -0.93153835, -0.26430007,
-0.29887114, 1.83132652, 1.54226746, 0.50651577, -0.51001179])
选项 2
使用 np.where
标识 mask
中的位置
i, j = np.where(~mask)
matrix.values[i, j]
array([ 0.6022148 , -0.19275783, -0.54066832, 1.95690678, 0.23993172,
0.27107843, 2.29409865, -0.70446894, -0.93153835, -0.26430007,
-0.29887114, 1.83132652, 1.54226746, 0.50651577, -0.51001179])
选项 2B
跳过遮罩并坚持使用上三角。
i, j = np.triu_indices(len(matrix))
matrix.values[i, j]
array([ 0.6022148 , -0.19275783, -0.54066832, 1.95690678, 0.23993172,
0.27107843, 2.29409865, -0.70446894, -0.93153835, -0.26430007,
-0.29887114, 1.83132652, 1.54226746, 0.50651577, -0.51001179])
我有一个方阵作为数据框,我想将对角线上方的所有值投影到一个系列中。我的想法是屏蔽对角线下方的所有元素,然后将数据帧转储到一个系列中,但它也会转储 NaN 值。这是示例:
users=[1,2,3,4,5]
cols=range(1,6)
matrix=pd.DataFrame(np.random.randn(len(users),len(cols)), index=users,columns=cols)
mask = np.ones(matrix.shape,dtype='bool')
mask[np.triu_indices(len(matrix))] = False
series=matrix.mask(mask).values.ravel()
在该系列中,我得到了所有上三角角值以及对应于下三角角的所有 NaN 值。显然我理解错了:我明白通过屏蔽数据框中的某些元素将不会使用被屏蔽的元素。有人知道我该怎么做吗?
选项 1
使用 pd.DataFrame.stack
,因为它会为您转储 np.nan
。
matrix.mask(mask).stack().values
array([ 0.6022148 , -0.19275783, -0.54066832, 1.95690678, 0.23993172,
0.27107843, 2.29409865, -0.70446894, -0.93153835, -0.26430007,
-0.29887114, 1.83132652, 1.54226746, 0.50651577, -0.51001179])
选项 2
使用 np.where
标识 mask
i, j = np.where(~mask)
matrix.values[i, j]
array([ 0.6022148 , -0.19275783, -0.54066832, 1.95690678, 0.23993172,
0.27107843, 2.29409865, -0.70446894, -0.93153835, -0.26430007,
-0.29887114, 1.83132652, 1.54226746, 0.50651577, -0.51001179])
选项 2B
跳过遮罩并坚持使用上三角。
i, j = np.triu_indices(len(matrix))
matrix.values[i, j]
array([ 0.6022148 , -0.19275783, -0.54066832, 1.95690678, 0.23993172,
0.27107843, 2.29409865, -0.70446894, -0.93153835, -0.26430007,
-0.29887114, 1.83132652, 1.54226746, 0.50651577, -0.51001179])