我有两个数据框 df1 和 df2。它们之间有一个共同的 ID 列。我需要根据 df1 中的 ID 从 df2 列中提取数据,但是我面临 MemoryError,因为数据帧很大,每个数据点超过 300 万个。我试过使用: -aq = pd.DataFrame(np.where(df2[df2['pid1'].isin(df1['shortId'])]))但它遇到内存错误。有没有有效的方法来做到这一点?数据框如下所示:-df1:-ShortID x y zqwe 1 1 1asd 1 1 1zxc 1 1 1rty 1 1 1fgh 1 1 1vbn 1 1 1df2:-pid1 pid2 Col1 Col2 Col3 Col4qwe qasd values values values valuesasd uio values values values valueszxc plm values values values valuesrty okn values values values valuesfgh uhb values values values valuesvbn tgv values values values valuesqasd qwe values values values valuesuio asd values values values valuesplm zxc values values values valuesokn rty values values values valuesuhb fgh values values values valuestgv vbn values values values values结果应如下所示:-ShortID x y z Col1 Col2 Col3 Col4qwe 1 1 1 values values values valuesasd 1 1 1 values values values valueszxc 1 1 1 values values values valuesrty 1 1 1 values values values valuesfgh 1 1 1 values values values valuesvbn 1 1 1 values values values values
1 回答
饮歌长啸
TA贡献1951条经验 获得超3个赞
merge应该更有效:
df1.merge(df2, left_on='ShortID', right_on='pid1', how='left').drop(columns=['pid1','pid2'])
如果这仍然引发内存错误,您可能需要使用dask dataframes,即将数据读入 dask dataframes 并以与上面编写的相同方式合并它们(除了 dask 2.2.0 不支持columns参数 in drop,因此您必须使用.drop('rkey', axis=1))
添加回答
举报
0/150
提交
取消
