按列列表中的值筛选熊猫数据帧



我有一个DataFrame,它有一列列表。我想返回那些列表中包含指定值的行的Dataframe的子集。

test = pd.DataFrame({'detail_id': [10000, 10001, 10002], 
'tokens': [['A', 'B', 'C'], ['A', 'D'], ['C', 'E', 'F', 'H']]})

如果我以这种方式筛选特定的ID,它会自动识别

test[test['detail_id'] == 10001]

如果我只想要在令牌列表中有"A"的前2行,下面的不起作用

test['A' in test['tokens']]

我得到了KeyError: False。我理解为什么,但我正在努力寻找解决方案。建议?

只需使用numpy.bitwise_and:

import numpy as np
test.loc[np.bitwise_and(test['tokens'].map(set), {'A'})]

阅读更多信息:https://numpy.org/doc/stable/reference/generated/numpy.bitwise_and.html

晚上睡个好觉,重新阅读选择文档,帮助我解决了这个问题。文件说,选择可以接受一个";布尔数组";。所以这就是我所做的。

import pandas as pd
test = pd.DataFrame({'detail_id': [10000, 10001, 10002, 10003], 
'tokens': [['A', 'B', 'C'], 
['A', 'D'], 
['C', 'E', 'F', 'H'], 
['X', 'YA', 'Z']]})
def has_a(row):
return 'A' in row['tokens']
test[test.apply(has_a, axis=1)]

此代码仅根据需要返回前2行。

最新更新