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的更新版本