基于多列值的具有重复键的两个大熊猫数据帧的条件合并/连接-Python
我来自R,老实说,这是使用R data.tables在一行中完成的最简单的事情,对于大型datatables,操作也相当快。但是我真的很难用Python实现它。前面提到的所有用例都不适合我的应用程序。目前的主要问题是Python解决方案中的内存使用,我将在下面解释 问题是:我有两个大数据帧df1和df2(每行大约50-100米),我需要根据两个条件将df2的两(或n)列合并到df1: 1) df1.id=df2.id(合并的常见情况) 2) df2.value_2A有趣的问题 看起来pandasql可能会做你想做的事情。请参阅: 有趣的问题 看起来pandasql可能会做你想做的事情。请参阅:基于多列值的具有重复键的两个大熊猫数据帧的条件合并/连接-Python,python,pandas,merge,conditional-statements,large-data,Python,Pandas,Merge,Conditional Statements,Large Data,我来自R,老实说,这是使用R data.tables在一行中完成的最简单的事情,对于大型datatables,操作也相当快。但是我真的很难用Python实现它。前面提到的所有用例都不适合我的应用程序。目前的主要问题是Python解决方案中的内存使用,我将在下面解释 问题是:我有两个大数据帧df1和df2(每行大约50-100米),我需要根据两个条件将df2的两(或n)列合并到df1: 1) df1.id=df2.id(合并的常见情况) 2) df2.value_2A有趣的问题 看起来pandas
我已经试过了。它在进程中使用相同的内存量,而且速度非常慢(连接表中有多少行?选择了哪些字段?我已经尝试过了。它在过程中使用了相同的内存量,而且速度非常慢。:(连接表中有多少行?选择了哪些字段?
import numpy as np
import pandas as pd
df1 = pd.DataFrame({'id': [1,1,1,2,2,3], 'value_1': [2,5,7,1,3,4]})
df2 = pd.DataFrame({'id': [1,1,1,1,2,2,2,3], 'value_2A': [0,3,7,12,0,2,3,1], 'value_2B': [1,5,9,15,1,4,6,3]})
df1
Out[13]:
id value_1
0 1 2
1 1 5
2 1 7
3 2 1
4 2 3
5 3 4
df2
Out[14]:
id value_2A value_2B
0 1 0 1
1 1 3 5
2 1 7 9
3 1 12 15
4 2 0 1
5 2 2 4
6 2 3 6
7 3 1 3
desired_output
Out[15]:
id value_1 value_2A value_2B
0 1 2 NaN NaN
1 1 5 3.0 5.0
2 1 7 7.0 9.0
3 2 1 0.0 1.0
4 2 3 2.0 4.0
5 2 3 3.0 6.0
6 3 4 NaN NaN
## This is NOT a solution because memory usage is just too large and
## too many oprations deeming it extremely inefficient and slow at large scale
output = pd.merge(df1, df2, on='id', how='left') ## output becomes very large in my case
output.loc[~((output['value_1'] >= output['value_2A']) & (output['value_1'] <= output['value_2B'])), ['value_2A', 'value_2B']] = np.nan
output = output.loc[~ output['value_2A'].isnull()]
output = pd.merge(df1, output, on=['id', 'value_1'], how='left')
## in R realm ##
require(data.table)
desired_output <- df2[df1, on=.(id, value_2A <= value_1, value_2B >= value_1)] #fast and easy operation