表 df1(Pandas 数据框):
id1 type cat
0 1 a 0
1 1 b 0
2 2 a 8
3 2 a 9
表 df2:
id2 type cat
0 0 a 8
1 0 a 9
2 1 a 8
3 1 a 9
4 2 a 8
5 3 a 9
6 4 b 7
7 5 b 8
我正在执行左连接:
merged = pd.merge(df1, df2, how='left')
我再次使用 Pandas 执行此操作,但我可以使用 SQL,我得到:
id1 type cat id2
0 1 a 0 NaN
1 1 b 0 NaN
2 2 a 8 0.0
3 2 a 8 1.0
4 2 a 8 2.0
5 2 a 9 0.0
6 2 a 9 1.0
7 2 a 9 3.0
不过,我想要的是将 df1 的
0
列中的 cat
视为通配符,就像它包含所有类别一样。它没有表达式,因此应从合并中排除。
在此示例中,结果将包括 df2 中的所有行,因为只有
type
列必须匹配。
不确定是否有一个简单的解决方案,但你可以做的一件事是单独准备带有通配符连接的数据帧并在最后连接它们:
merged1 = pd.merge(df1[df1['cat']!=0, df2, how='left')
df1_tmp = df1[df1['cat']==0].drop('cat', axis=1)
df1_tmp['key'] = 0
df2['key'] = 0
merged2 = df1_tmp.merge(df2, on='key', how='outer')
merged = pd.concat(merged1, merged2)