Python 如何按列表替换所有行中的值

Python 如何按列表替换所有行中的值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一份清单: a = [a,te,re,edf,c,sa,da,wq,rw...] 和DF 5888透镜: name sex snps1 snps2 snps3 snps4 ... snps338 aas M a te re dd ... ... aab M a ga re af ... ... ... 我需要根据列表替换值 列表中的第一个值是数据帧等的第一个SNP,所以我需要将列表中的第一个值与整个列“snps1”进行

我有一份清单:

a = [a,te,re,edf,c,sa,da,wq,rw...]
和DF 5888透镜:

name  sex snps1 snps2 snps3 snps4 ... snps338
aas   M    a     te    re    dd   ... ...
aab   M    a     ga    re    af   ... ...
...
我需要根据列表替换值

列表中的第一个值是数据帧等的第一个SNP,所以我需要将列表中的第一个值与整个列“snps1”进行比较。并替换True/False上的值

预期结果:

  name  sex snps1 snps2 snps3 snps4 ... snps338
 sample1   M  TRUE  TRUE   TRUE  FALSE   ... ...
 sample2   M  TRUE  FALSE  TRUE  FALSE   ... ...
     ...
我写了一段代码:

两个用于循环。第一个用于len中的j(列表),第二个用于df len,以及if语句。。。但这意味着我将被循环5888x338次。而且要花太多时间

我怎样才能做得更好?我试图找到一个解决方案,但所有建立的帖子都不适合我的问题

somoeone可以帮助mi吗?

您可以使用,例如:

import pandas as pd


data = [['aas', 'M', 'a', 'te', 're', 'dd'],
        ['aab', 'M', 'a', 'ga', 're', 'af']]

df = pd.DataFrame(data=data, columns=['name', 'sex', 'snps1', 'snps2', 'snps3', 'snps4'])

a = ['a', 'te', 're', 'edf', 'c', 'sa', 'da', 'wq', 'rw']
columns = ['snps1', 'snps2', 'snps3', 'snps4']

lookup = { key : (value,) for key, value in zip(columns, a) }
df.loc[:, columns] = df.loc[:, columns].isin(lookup)
print(df)
输出

  name sex snps1  snps2 snps3  snps4
0  aas   M  True   True  True  False
1  aab   M  True  False  True  False

考虑到您已经创建了数据帧“df”和列表“a”,这样做可以:

for index, val in enumerate(a):
    colname="snps"+str(index+1)
    df[colname]=df[colname].astype(str)==val

@DanielMesejo,如果我正确理解了这个问题,这个解决方案将不会考虑正确的比较顺序。也就是说,snps1只应与[0]进行比较,snps2只应与[1]进行比较,依此类推。@martin我在下面提供了一个解决方案,可以与列表中的正确值进行比较。@san是正确的。我提供了一个仍然使用isin的更新版本