我有一个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行。