我有一个列表:
a = [a,te,re,edf,c,sa,da,wq,rw...]
DF 5888 len:
name sex snps1 snps2 snps3 snps4 ... snps338
aas M a te re dd ... ...
aab M a ga re af ... ...
...
我需要替换基于列表的值。
列表中的第一个值是数据帧等的第一个SNPS。因此,我需要将列表中的第一个值与整个列“ snps1”进行比较。并替换对/错值。
预期结果:
name sex snps1 snps2 snps3 snps4 ... snps338
sample1 M TRUE TRUE TRUE FALSE ... ...
sample2 M TRUE FALSE TRUE FALSE ... ...
...
我写了一个代码:
两个for循环。首先是len(list)中的j,第二是df len,以及if语句...但这意味着我将被循环5888x338次。而且需要太多时间。
如何更好地做到这一点?我尝试找到一种解决方案,但所有已发布的帖子都不适合我的问题。
somoeone可以帮助mi吗?
答案 0 :(得分:1)
您可以使用isin,例如:
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
答案 1 :(得分:0)
考虑到您已经创建了数据框“ df”和列表“ a”,则可以这样做:
for index, val in enumerate(a):
colname="snps"+str(index+1)
df[colname]=df[colname].astype(str)==val