如何用“ NA”填充两个列表之间的差异

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

标签: python list

我要比较一堆ce python列表,在这种情况下,e列表的长度始终大于或等于{{1} }列表。我想做的是比较这两个列表,如果它们的长度不相等,我想用{NA“来填充c列表的” gaps“。

例如,如果我们看下面两个列表:

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']

1 个答案:

答案 0 :(得分:0)

我会用熊猫和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))