【问题标题】:efficient mapping of very large dataframes非常大的数据帧的有效映射
【发布时间】:2021-03-13 18:54:59
【问题描述】:

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

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

对于df1 中的a_id 匹配df2 中的a_id,我需要将edf2 添加到df1 行。 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)

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

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

    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
    
    

    【讨论】:

    • 这似乎完成了这项工作。它合并了两个数据框,使用 a_id 列映射行。
    猜你喜欢
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 2019-06-22
    • 1970-01-01
    • 2015-11-07
    • 2021-10-06
    • 1970-01-01
    相关资源
    最近更新 更多