非常大的数据帧的有效映射
Posted
技术标签:
【中文标题】非常大的数据帧的有效映射【英文标题】:efficient mapping of very large dataframes 【发布时间】:2021-03-13 18:54:59 【问题描述】:我有两个数据框 df1
和 df2
具有以下列:
A = ['id', 'a_id', 'c', 'd']
B = ['a_id', 'e', 'f']
对于df1
中的a_id
匹配df2
中的a_id
,我需要将e
从df2
添加到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 列映射行。以上是关于非常大的数据帧的有效映射的主要内容,如果未能解决你的问题,请参考以下文章