df
col1 col2
A a|x|y
B a|x|y
C c|x|z
D e|j|y
我的目标是创建一个名为“status”的新列,以查看 col1 中的条目是否是 col2 中的条目之一(由竖线分隔)。 输出应该是这样的
col1 col2 status
A a|x|y True
B a|x|y False
C c|x|z True
D e|j|y False
我的代码:
df["col1"]= df["col1"].str.lower()
df['status']=df['col1'].isin(df['col2'])
但这是将“状态”列中的所有条目都设为 False
请帮帮我,拜托!!!
请您参考如下方法:
get_dummies
df.col2.str.get_dummies().mul(pd.get_dummies(df.col1.str.lower())).sum(1).astype(bool)
0 True
1 False
2 True
3 False
dtype: bool
a = pd.get_dummies(df.col1.str.lower())
b = df.col2.str.get_dummies()
status = b.mul(a).sum(1).astype(bool)
df = df.assign(status=status)
df
col1 col2 status
0 A a|x|y True
1 B a|x|y False
2 C c|x|z True
3 D e|j|y False
get_dummies 和 einsum
a = pd.get_dummies(df.col1.str.lower())
b = df.col2.str.get_dummies()
a, b = a.align(b, fill_value=0)
status = np.einsum('ij,ij->i', a, b).astype(bool)
df = df.assign(status=status)
df
col1 col2 status
0 A a|x|y True
1 B a|x|y False
2 C c|x|z True
3 D e|j|y False
