Как заменить значения во всех строках панд списком - PullRequest
0 голосов
/ 06 октября 2019

У меня есть список:

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». И замените значения на True / False.

Ожидаемый результат:

  name  sex snps1 snps2 snps3 snps4 ... snps338
 sample1   M  TRUE  TRUE   TRUE  FALSE   ... ...
 sample2   M  TRUE  FALSE  TRUE  FALSE   ... ...
     ...

Я написал код:

two for loop. Сначала для j в len (список), затем для df len и if if ... но это означает, что я буду зациклен 5888x338 раз. И это занимает слишком много времени.

Как мне сделать это лучше? Я пытался найти решение, но все основанные сообщения не подходили для моей проблемы.

Может ли somoeone помочь мне с этим?

Ответы [ 2 ]

1 голос
/ 06 октября 2019

Вы можете использовать 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
0 голосов
/ 06 октября 2019

Учитывая, что у вас уже есть фрейм данных 'df' и список 'a', это может сделать:

for index, val in enumerate(a):
    colname="snps"+str(index+1)
    df[colname]=df[colname].astype(str)==val
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...