我有一个数据框和一个列表:
df = pd.DataFrame({'id':[1,2,3,4,5,6,7,8],
'char':[['a','b'],['a','b','c'],['a','c'],['b','c'],[],['c','a','d'],['c','d'],['a']]})
names = ['a','c']
只有 a
和 c
都出现在 char
列中时,我才想获取行。(这里的顺序无关紧要)
预期输出:
char id
1 [a, b, c] 2
2 [a, c] 3
5 [c, a, d] 6
我的努力
true_indices = []
for idx, row in df.iterrows():
if all(name in row['char'] for name in names):
true_indices.append(idx)
ids = df[df.index.isin(true_indices)]
这给了我正确的输出,但它对于大型数据集来说太慢了,所以我正在寻找更有效的解决方案。
最佳答案
使用pd.DataFrame.apply
:
df[df['char'].apply(lambda x: set(names).issubset(x))]
输出:
id char
1 2 [a, b, c]
2 3 [a, c]
5 6 [c, a, d]
关于python - 如何检查列表中的所有元素是否都存在于 pandas 列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55745235/