Как заполнить расхождения между двумя списками с помощью «NA» - PullRequest
0 голосов
/ 15 мая 2019

У меня есть несколько списков Python c и e, которые мне нужно сравнить, и в этом случае длина списка e всегда больше или равна списку c. Я хочу сравнить эти два списка, и, если их длины не равны, я хочу заполнить список пробелов в c знаком «NA».

Например, если мы посмотрим на эти два списка:

e = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14']
c = ['2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13']

Я бы хотел, чтобы список c заполнил "NA" для значений, в которых он отсутствует (и сохранил порядок), например:

c = ['NA', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', 'NA']

1 Ответ

0 голосов
/ 15 мая 2019

Я бы использовал панд и pd.Series.where для маски. Сначала конвертируйте их в серию e = pd.Series(e), затем

s = pd.concat([e,c],sort=True).drop_duplicates() #remove sort=True for versions < 0.23
s.where(s.isin(c))

выходы

0     NaN
1       2
2       3
3       4
4       5
5       6
6       7
7       8
8       9
9      10
10     11
11     12
12     13
13    NaN

Вы также можете следовать классическому подходу, основанному исключительно на python. Используйте два указателя, выполняйте их одновременно и сравнивайте значения.

p1 = 0
p2 = 0

f = []
while (p1 < len(e)) and (p2 < len(c)):

    vale = e[p1]
    valc = c[p2]

    if vale < valc: 
        f.append('NA')
        p1 += 1
    elif vale == valc:
        f.append(valc)
        p1 += 1
        p2 += 1
    else:
        p2 += 1

    if p1 == len(e): f.extend(c[p2:])
    if p2 == len(c): f.extend(['NA']*(len(e)-p1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...