我正在使用CSV文件,我有一个代码可以计算文档之间的相似性。帖子 1 提供代码和数据的详细信息,
输出如下:数据.csv如下所示:
idx messages
112 I have a car and it is blue
114 I have a bike and it is red
115 I don't have any car
117 I don't have any bike
输出为:
id 112 114 115 117
id
112 100.0 78.0 51.0 50.0
114 78.0 100.0 47.0 54.0
115 51.0 47.0 100.0 83.0
117 50.0 54.0 83.0 100.0
现在我想在没有恒等数据 (100.0( 的情况下计算相似性矩阵下三角形的平均值和标准差(因为上下三角形都是相似的(。
我尝试使用熊猫内置平均值和标准:
df_std = df.std()
df_Mean = df.mean()
但这考虑了输出中的所有数据,如恒等式和上三角形。
我想知道是否有任何方法可以按照我提到的方式计算平均值和标准差。
将 numpy.tril
与 k=-1
一起使用,并将 0 设为 np.nan
:
import numpy as np
ltri = np.tril(df.values, -1)
ltri = ltri[np.nonzero(ltri)]
输出:
array([[ 0., 0., 0., 0.],
[78., 0., 0., 0.],
[51., 47., 0., 0.],
[50., 54., 83., 0.]])
现在你可以做ltri.std()
,ltri.mean()
:
ltri.std(), ltri.mean()
# (14.361406616345072, 60.5)
您可以将
所有不需要的值屏蔽为np.nan
df.values[np.triu_indices_from(df.values,0)]=np.nan
df.mean()
112 59.666667
114 50.500000
115 83.000000
117 NaN
dtype: float64
df.std()
112 15.885003
114 4.949747
115 NaN
117 NaN
dtype: float64
屏蔽后的值
df
112 114 115 117
112 NaN NaN NaN NaN
114 78.0 NaN NaN NaN
115 51.0 47.0 NaN NaN
117 50.0 54.0 83.0 NaN