df2 = df.derive(
{id: d => 1*(d.itemLabel === d.maleform & d.itemLabel != d.femaleform)
+ 2*(d.itemLabel !== d.maleform & d.itemLabel === d.femaleform)
+ 3*(d.itemLabel === d.maleform & d.itemLabel === d.femaleform)
+ 4*(d.itemLabel !== d.maleform & d.itemLabel !== d.femaleform)
}
).join_left(
aq.table({ id: [1, 2, 3, 4], type: ["male-generic", "female-generic", "epicene", "different"] }),
"id"
).dedupe()