我有以下数据:
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中只能出现一次。
谢谢=)
答案 0 :(得分:1)
您可以这样做:
mask = t1.apply(lambda row: (row['id1'], row['id2']) in zip(t2.id1, t2.id2), axis=1)
result = t1[mask]
我不确定您要朝哪个方向编写“更好的”代码片段,但是我个人不会创建这些字符串列,因为所有信息已经在数据框中。那可能是您自己想要的标准...