首页 > 解决方案 > 非常大的数据帧的有效映射

问题描述

我有两个数据框df1df2以下列:

A = ['id', 'a_id', 'c', 'd']
B = ['a_id', 'e', 'f']

对于a_iddf1匹配a_iddf2,我需要添加efromdf2df1行。Df1大约有 700 万行,df2 大约是 15k。我尝试了下面的代码,但时间太长了。我想知道是否有更好的解决方案可以加快速度并提高内存效率。

def map_df(row):
    for i, r in df2.iterrows():
        if row['a_id'] == r['a_id']:
            return row2['part_mean_correctness']

df1['e'] = df1.apply (lambda row: map_df(row), axis=1)

标签: pythonpandasdataframe

解决方案


不确定我是否完全理解您的问题,但您是否尝试合并?如果是这样,那么您的代码应该如下所示:

import pandas as pd 
df1 = pd.DataFrame({'a_id':[1, 2, 3, 4, 5], 'c': ["foo", "bar", "baz", "qux", "foobar"]})
df2 = pd.DataFrame({'a_id':[3, 4], 'e': ["bar", "baz"]})
df1 = df1.merge(df2, on=["a_id"], how="left")

然后df1应该看起来像

   a_id       c    e
0     1     foo  NaN
1     2     bar  NaN
2     3     baz  bar
3     4     qux  baz
4     5  foobar  NaN


推荐阅读