Skip to main content
 首页 » 编程设计

python之如果 df 中的列的值是同一数据框中另一列的值之一(逐行),则匹配

2025年05月04日13lovecherry

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