基于另一个表的表子集

时间:2018-10-05 10:44:34

标签: python dataframe subset

我有以下数据:

t1 = pd.DataFrame({'date': ['d1','d1','d2','d1'],'id1': ['Apple', 'Pear','Pear','Pear'], 'id2': ['Blue', 'Orange','Blue','Orange']})   
t2 = pd.DataFrame({'id1': ['Apple','Pear'], 'id2': ['Orange', 'Orange']})
 

我做了以下事情以获得结果,但是我对代码不满意:

t1['pairing'] = t1.apply(lambda x: "%s_%s" % (x.id1, x.id2), axis=1)
 
t2['pairing'] = t2.apply(lambda x: "%s_%s" % (x.id1, x.id2), axis=1)
 
(t1[t1.pairing.isin(t2.pairing)]).drop("pairing",axis=1)

基本上,我想将t2中存在的id1和id2的组合保留在t1中。给定的组合在t1中可以出现多次,但在t2中只能出现一次。

谢谢=)

1 个答案:

答案 0 :(得分:1)

您可以这样做:

mask = t1.apply(lambda row: (row['id1'], row['id2']) in zip(t2.id1, t2.id2), axis=1)
result = t1[mask]

我不确定您要朝哪个方向编写“更好的”代码片段,但是我个人不会创建这些字符串列,因为所有信息已经在数据框中。那可能是您自己想要的标准...