我有一个数据框,其中一列是列表。我正在尝试使用isin,但我不断收到“ TypeError:无法散列的类型:'list'”
df = pd.DataFrame({'A': [[5,4,3,6], [7,8,9,0]], 'B': [[1,2,3,5], [1,2,6,8]]})
df[df['A'].isin([3, 6])]
预期输出应为:
A B
1 [5,4,3,6] [1,2,3,5]
我将如何解决此问题,我尝试使用Apply但无法弄清楚?
答案 0 :(得分:3)
IIUC,您可以使用set
代替list
...,使列表中存在所有键,请尝试使用set.issubset
:
df[df['A'].apply(lambda x: {'3', '6'}.issubset(set(x)))]
# shorthand df[df['A'].apply(lambda x: {'3', '6'} < set(x))]
df = pd.DataFrame({'A': [['5','6','3','4'], ['1','2','1','3']], 'B': [[1,2,3,5],[6,7,8,9]]})
# A B
# 0 [5, 6, 3, 4] [1, 2, 3, 5]
# 1 [1, 2, 1, 3] [6, 7, 8, 9]
df[df['A'].apply(lambda x: {'3', '6'}.issubset(set(x)))]
[出]
A B
0 [5, 6, 3, 4] [1, 2, 3, 5]
如果您只需要存在至少一个键,请使用set.intersection
:
df[df['A'].apply(lambda x: bool({'3', '6'}.intersection(set(x))))]
# shorthand df[df['A'].apply(lambda x: bool({'3', '6'} & set(x)))]
[出]
A B
0 [5, 6, 3, 4] [1, 2, 3, 5]
1 [1, 2, 1, 3] [6, 7, 8, 9]