python - pandas python - 如何将数组(与数据框长度不同)转换为数据框并保留行名和列名?
问题描述
首先,我使用数据框计算了余弦相似度,结果返回数组对象。
假设,这是我的数据框
A B C D E
X1 0 0 1 0 1
X2 0 1 2 3 1
X3 0 1 1 0 1
这是我计算df的方式
df = df.drop(['colX'], axis=1)
cos_sim = cosine_similarity(df_new_jac)
它像这样返回
array([[0., 0., 1.],
[0., 1., 2.],
[0., 1., 1.]
但是,我希望看到这样的结果
X1 X2 X3
X1 0 0 1
X2 0 1 2
X3 0 1 1
但是,根据“df”和“cos_sim”的形状不同,我不能使用这个代码
df = df.set_index('colX')
v = cosine_similarity(df.values)
df[:] = v
df.reset_index()
错误显示, len 必须相等。有什么建议可以解决这个问题吗?
解决方案
不完全确定你想在这里实现什么,但这是我最好的猜测:
import pandas as pd
# the original df
df1 = pd.DataFrame({'index': ['X1','X2','X3'], 'A':[0,0,0], 'B':[0,1,1], 'C': [1,2,1], 'D': [0,3,0], 'E':[1,1,1]})
# the cosine_similarity df
df2 = pd.DataFrame({'index': ['X1','X2','X3'], 'X1':[0,0,0], 'X2':[0, 1,1], 'X3':[1,2,1]})
# note the 'index' column is a column, not the index.
# merge the 2, by default on the common column (i.e. the 'index' column)
df = df1.merge(df2)
df.set_index('index', inplace=True)
> A B C D E X1 X2 X3
index
X1 0 0 1 0 1 0 0 1
X2 0 1 2 3 1 0 1 2
X3 0 1 1 0 1 0 1 1
推荐阅读
- java - 如何将 SVG 中的 feGaussianBlur 转换为 JavaFX 中的 GaussianBlur 效果?
- google-drive-api - 如何使用来自 VK 或其他社交网络的照片 url 将照片上传到谷歌驱动器
- vector - 将数据从一个集合向量插入到另一个集合
- python - sklearn.model_selection.RandomizedSearchCV.fit 抛出的 0x7f466c02fe20> 处的 KerasRegressor 对象和 0x7f46ed175580> 处的 rv_frozen 对象是什么意思?
- laravel - 带有 Vue 3 API 调用的 Laravel sanctum
- flutter - 将服务级别缩小到更小部分的最佳方法
- r - pdftools::pdf_text 无法识别所有空格
- service - Android Location Documentation 提供了 GitHub 中 location-samples 的链接,但这些示例不适用于 SdkVersion 29
- html - 在wordpress中更改按钮悬停状态的问题
- java - 多数元素数组 Java O(nlogn)