[英]How to replace values in all pandas rows by list
我有一个清单:
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 ... ...
...
我需要根据列表替换值。
列表中的第一个值是 dataframe 等的第一个 SNPS。所以我需要将列表中的第一个值与整列“snps1”进行比较。 并替换 True/False 上的值。
预期结果:
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 次。 而且需要太多时间。
我怎样才能以更好的方式做到这一点? 我尝试找到了解决方案,但所有已创建的帖子都不适合我的问题。
有人可以帮助我吗?
您可以使用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)
Output
name sex snps1 snps2 snps3 snps4
0 aas M True True True False
1 aab M True False True False
考虑到您已经创建了 dataframe 'df' 和列表 'a',这样可以:
for index, val in enumerate(a):
colname="snps"+str(index+1)
df[colname]=df[colname].astype(str)==val
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.