当查询的列有多个值时,如何检查一列中的值是否在另一列中

  • 本文关键字:一列 是否 查询 何检查 python pandas
  • 更新时间 :
  • 英文 :


问题

当查询的列有多个值时,如何检查一列中的值是否在另一列中?

最小可重复性示例

df1 = pd.DataFrame({'patient': ['patient1', 'patient1', 'patient1','patient2', 'patient2', 'patient3','patient3','patient4'], 
'gene':['TYR','TYR','TYR','TYR','TYR','TYR','TYR','TYR'],
'variant': ['buu', 'luu', 'stm','lol', 'bla', 'buu', 'lol','buu'],
'genotype': ['buu,luu,hola', 'gulu,melon', 'melon,stm','melon,buu,lol', 'bla', 'het', 'het','het']})
print(df1)
patient gene variant       genotype
0  patient1  TYR     buu   buu,luu,hola
1  patient1  TYR     luu     gulu,melon
2  patient1  TYR     stm      melon,stm
3  patient2  TYR     lol  melon,buu,lol
4  patient2  TYR     bla            bla
5  patient3  TYR     buu            het
6  patient3  TYR     lol            het
7  patient4  TYR     buu            het

我尝试过的

df1.variant.isin(df1.genotype)
0    False
1    False
2    False
3    False
4     True
5    False
6    False
7    False
Name: variant, dtype: bool

这不起作用。预期结果是:

0    True
1    False
2    True
3    True
4    True
5    False
6    False
7    False
Name: variant, dtype: bool

我不知道列基因型有多少不同的值。这在1到20 之间变化很大

您可以使用DataFrame.apply+str.split:

print(df1.apply(lambda x: x['variant'] in x['genotype'].split(','), axis=1))

打印:

0     True
1    False
2     True
3     True
4     True
5    False
6    False
7    False
dtype: bool

使用列表组件

[var in gen for var,gen in zip(df1["variant"], df1["genotype"])]

输出:

# with the Series constructor pd.Series(...)
0     True
1    False
2     True
3     True
4     True
5    False
6    False
7    False
dtype: bool

您需要创建一个简单的function,并使用apply在所有行中进行迭代。

def check_variant(df):

return True if df['genotype'].find(df['variant']) != -1 else False

和触发器:

df1.apply(check_variant, axis=1)

结果:

0     True
1    False
2     True
3     True
4     True
5    False
6    False

7错误

相关内容

  • 没有找到相关文章

最新更新