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

时间:2019-10-05 22:45:17

标签: python pandas dataframe

我有一个列表:

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吗?

2 个答案:

答案 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