非常大的数据帧的有效映射

Posted

技术标签:

【中文标题】非常大的数据帧的有效映射【英文标题】: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)

【问题讨论】:

【参考方案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 列映射行。

以上是关于非常大的数据帧的有效映射的主要内容,如果未能解决你的问题,请参考以下文章

如何有效地迭代 Pandas 数据帧的连续块

更有效地显示非常大的数据集

在 R 中有效地设置非常大的数据帧

实施快速有效的方法来搜索非常大的数据集中的项目列表的建议/意见

用字典映射数据帧的特定索引

来自具有太多列的数据帧的 Python 散点矩阵