繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM