这是一个奇怪的例子:我有3个数据框,“prov_data”包含提供者ID并计入区域和类别(即,提供程序与这些区域和类别交互的次数) 。尝试合并具有多种条件的数据框
prov_data = DataFrame({'aprov_id':[1122,3344,5566,7788],'prov_region_1':[0,0,4,0],'prov_region_2':[2,0,0,0],
'prov_region_3':[0,1,0,1],'prov_cat_1':[0,2,0,0],'prov_cat_2':[1,0,3,0],'prov_cat_3':[0,0,0,4],
'prov_cat_4':[0,3,0,0]})
“tender_data”,其中包含相同的,但招标。
tender_data = DataFrame({'atender_id':['AA12','BB33','CC45'],
'ten_region_1':[0,0,1,],'ten_region_2':[0,1,0],
'ten_region_3':[1,1,0],'ten_cat_1':[1,0,0],
'ten_cat_2':[0,1,0],'ten_cat_3':[0,1,0],
'ten_cat_4':[0,0,1]})
最后一个 “NO_MATCH” DF至极包含供应商,招标之间禁止匹配。
no_match = DataFrame({ 'prov_id':[1122,3344,5566],
'tender_id':['AA12','BB33','CC45']})
我需要做到以下几点:创建一个新的DF,将追加prov_data & tender_data DataFrames的行,如果他们(1)匹配的一个或多个类别(即在同一类别> 0)AND(2)匹配一个或多个区域AND(3)不在no_match列表中。
所以这会给我这个DF:
df = DataFrame({'aprov_id':[1122,3344,7788],'prov_region_1':[0,0,0],'prov_region_2':[2,0,0],
'prov_region_3':[0,1,1],'prov_cat_1':[0,2,0],'prov_cat_2':[1,0,0],'prov_cat_3':[0,0,4],
'prov_cat_4':[0,3,0], 'atender_id':['BB33','AA12','BB33'],
'ten_region_1':[0,0,0],'ten_region_2':[1,0,1],
'ten_region_3':[1,1,1],'ten_cat_1':[0,1,0],
'ten_cat_2':[1,0,1],'ten_cat_3':[1,0,1],
'ten_cat_4':[0,0,0]})
谢谢!这工作完美,原来的dfs是600K x 75,所以这是一个非常好的选择。 – castor
我在运行原始数据框后,实际上得到了退出代码137。我认为主要的问题是no_match DF,它有600K行。供应商矩阵有43K和投标矩阵140K ...任何想法@piRSquared? – castor
http:// stackoverflow。com/a/1041309/2336654 如果该链接是正确的,我猜你正在服务器上运行一个管理员杀死你的脚本。 – piRSquared