我有一个这样的列表:
list1 = ['4361', '1856', '57586', '79017', '972', '974', '1829', '10787', '85477', '57019', '7431', '53616', '26228', '29085', '5217', '5527']
然后我有两列数据帧,像这样:
print(df['col A'][0:10])
0 6416
1 84665
2 90
3 2624
4 6118
5 375
6 377
7 377
9 351
10 333
print(df['col B'][0:10])
0 2318
1 88
2 2339
3 5371
4 6774
5 23163
6 23647
7 27236
9 10513
10 1600
我想说'如果列表中的项位于数据帧的col A或col B中,则仅返回数据帧中的行'。
我可以想象如何迭代地做到这一点,就像这样:
for each_item in list1:
for i,row in df.iterrows():
if each_item in row['col A']:
print(row)
if each_item in row['col B']:
print (row)
我只是想知道是否有一种更简洁的方法来做到这一点,我不需要不断地循环遍历数据框,因为列表和数据框都相当大。
我在网上看到了这个代码片段,它将返回df['col A']
等于一个值或df['col B']
等于一个值的行:
print(df[(df["col A"]==1) | (df_train["col A"]==2)]
我只是不确定如何将其转换为提取数据,如果它在列表中。有人能告诉我如何将这种想法合并到我的代码中,或者人们认为我的原始代码片段(使用.iterrows())是最好的方法吗?
使用isin
:
print(df[(df['col A'].isin(list1)) | (df['col B'].isin(list1))])