【发布时间】:2021-06-22 13:28:20
【问题描述】:
我有三个数据框 df1 有 1 160 164 行和 4 个变量,df2 有 11241 行和 4 个变量,df3 有 1 630 644 行和 6 个变量
df1 看起来像:
df2 看起来像:
df1 中的观察结果是 df3 中energy_kcal_100g_nettoye 已满的观察结果。
df2 中的观察结果是 df3 中的观察结果,energy_kcal_100g_nettoye 不可用。
df3 看起来像:
我需要找到 df1 和 df2 的每一行之间的欧几里得距离(不在 df1 或 df2 内)。然后我需要保留第 5 个最接近的索引来计算 df3 中第 5 个索引上的 energy_kcal_100g_nettoye 的平均值。
我尝试使用此代码,但它永远不会结束:
for index, row in df2.iterrows():
dist_matrix = df1.apply(lambda row2: [np.linalg.norm(row2.values - row.values)], axis=1)
dist_matrix=dist_matrix.sort_values()
observation=dist_matrix[0:5].index
echantillon=df3.loc[observation]
df3.loc[index,'energy_kcal_100g_mean_distance_5']=echantillon['energy_kcal_100g_nettoye'].mean()
我想使用矢量化来更快地做到这一点,但我没有成功。我的数据太大了。
你能帮我高兴吗
谢谢
Ps:对不起我的英语
【问题讨论】:
-
您是否要创建大小为
len(df1) x len(df2)的矩阵? -
是的,但我不能。我有记忆错误。我能做些什么 ?如果可能的话;)
-
一般答案是否,您正在尝试分配
470. GiB的数据。您可以尝试将它们保存在磁盘上,但预计会保留那么多空间。
标签: python pandas dataframe numpy euclidean-distance