我要比较一堆c
和e
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']
答案 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))