python - 非常大的数据帧的有效映射
问题描述
我有两个数据框df1
和df2
以下列:
A = ['id', 'a_id', 'c', 'd']
B = ['a_id', 'e', 'f']
对于a_id
在df1
匹配a_id
中df2
,我需要添加e
fromdf2
到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)
解决方案
不确定我是否完全理解您的问题,但您是否尝试合并?如果是这样,那么您的代码应该如下所示:
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
推荐阅读
- javascript - 某些验证失败后立即更改输入框颜色和背景
- apache-kafka - 并非所有属性都在 kafka producer.metrics() 中可用
- node.js - 在超级账本作曲家中获取发出的事件
- linux - 如何提取多个值并在文件中打印正确的输出?
- docker - 使用“docker build”或“docker run”时的环境差异
- android - 改造 2:设置超时无效
- azure - 检查 Azure 中是否存在资源错误变量不起作用
- vba - 如何根据另一个文本框的值为文本框着色?
- google-apps-script - 在 Google 脚本的帮助下发送带有 pdf 附件的邮件
- c++ - 为什么我的c++程序输出乱码