我有一个pandas数据帧:
id value
14 122
15 120
16 190
17 490
18 328
19 309
20 323
我有一个id L = [14,17,20]
的列表,并希望做两件事:
获取那些行的索引列表,其中id不在列表L中
即(行15,16,18,19的索引)
和
删除ID的行不在列表L中。
我的预期输出:
id value
14 122
17 490
20 323
答案 0 :(得分:3)
您可以将boolean indexing
与isin
一起用于反转布尔值掩码~
:
idx = df.index[~df['id'].isin(L)].tolist()
print (idx)
[1, 2, 4, 5]
然后drop
:
df1 = df.drop(idx)
print (df1)
id value
0 14 122
3 17 490
6 20 323
替代:
df1 = df[df['id'].isin(L)]
print (df1)
id value
0 14 122
3 17 490
6 20 323
答案 1 :(得分:2)
替代解决方案:
In [106]: df.query("id in @L")
Out[106]:
id value
0 14 122
3 17 490
6 20 323