我有一个csv文件,其中包含img_A,img_B和目标值列。
csv 1:
img_A img_B target
img1.png img2.png 1
img1.png img3.png 1
img1.png img4.png 0
img1.png img5.png 1
img6.png img1.png 0
我还有另一个巨大的csv文件,其中包含所有图像及其特征向量,例如:
csv2:
img f1 f2 f3 f4 f5
img1.png 0 1 0 1 0
我需要具有一个合并的特征向量,例如:
img_A img_B f1_A f2_A f3_A f4_A f5_A f1_B f2_B f3_B f4_B f5_B target
img1.png img_2.png 0 1 0 1 0 0 1 0 1 0 1
虽然我的第一印象是通过将csv2与自身合并来获得笛卡尔乘积,然后使用csv1中的列组合对其进行过滤,但由于csv2的形状约为20000 x 512并且csv1的形状约为 75000 x 3。
我尝试过:
df = df.assign(key=1).merge(df.assign(key=1), on="key", suffixes=["_A", "_B"]).drop("key", axis=1) # memory error
尽管我尝试将数据划分为多个块,但要花很长时间才能获得结果。
有人可以建议这样做的最佳方法吗?
答案 0 :(得分:2)
给定df1
的数据帧df2
,您可以在重命名df2
中的列之后合并两次:
res = df1.merge(df2.add_suffix('_A'), on='img_A')\
.merge(df2.add_suffix('_B'), on='img_B')