Pandas:在约束条件下对每对列应用函数

2024-04-26 20:26:59 发布

您现在位置:Python中文网/ 问答频道 /正文

正如标题所说,我试图在某些条件下对数据帧的每对列应用一个函数。我将试着说明这一点。我的测向格式是:

Code |  14  |  17  |  19  | ...
w1   |  0   |   5  |   3  | ...
w2   |  2   |   5  |   4  | ... 
w3   |  0   |   0  |   5  | ...

代码对应于矩形网格中确定的位置,ws是不同的单词。我只想在每对列之间应用余弦相似性度量(已编辑!)如果对中某一列中的项之和大于5。在

预期输出如下:

^{pr2}$

cs是每对列的余弦相似性的结果。 有什么合适的方法来做这件事吗?在

如有任何帮助,我们将不胜感激:-)


Tags: 数据函数代码标题ws度量格式code
1条回答
网友
1楼 · 发布于 2024-04-26 20:26:59

要将余弦度量应用于来自两个输入集合的每个对,您可以 可以使用^{}。这将比 使用双Python循环。在

{让所有列中的一列。让另一个集合仅为总和大于5的列:

import pandas as pd
df = pd.DataFrame({'14':[0,2,0], '17':[5,5,0], '19':[3,4,5]})
mask = df.sum(axis=0) > 5
df2 = df.loc[:, mask]

然后,只需调用cdist,就可以计算出所有的余弦相似性:

^{pr2}$

可以将这些值包装在新的数据帧中并重新调整形状:

^{3}$
import pandas as pd
import scipy.spatial.distance as SSD
df = pd.DataFrame({'14':[0,2,0], '17':[5,5,0], '19':[3,4,5]})
mask = df.sum(axis=0) > 5
df2 = df.loc[:, mask]
values = SSD.cdist(df2.T, df.T, metric='cosine')
result = pd.DataFrame(values, columns=df.columns, index=df2.columns)
result = result.stack()
mask = result.index.get_level_values(0) != result.index.get_level_values(1)
result = result.loc[mask]
print(result)

生成序列

17  14    0.292893
    19    0.300000
19  14    0.434315
    17    0.300000

相关问题 更多 >