使用Pandas DataFrame列表列进行比较

3

I have a dataframe df like this:

col1 | col2
 a   | [1,2]
 b   | [3,4]
 c   | [3,9]

我想根据匹配的输入数组获取行,因此如果我有数组[1,2],我可以得到:

col1 | col2
 a   | [1,2]

当我尝试使用这个公式时,它不起作用:
df.loc[df['Col2'] == [1,2]]
Error: Lengths must match to compare
1个回答

4
你遇到错误的真正原因是列表并不是相同大小,这会导致使用 DataFrame.eq 时出现问题。
处理这个问题的最佳方法是使用列表推导式构建一个布尔掩码,然后使用它来索引 df:
df[[v == [1, 2] for v in df['col2'].tolist()]]

另一个选择是使用 df.apply,但它比这个方法慢得多。

@NBC 不确定你在做什么,但很可能是错误的(对于这个例子来说它运行得很好)。 - cs95
@jezrael 那个答案并不适用于这个问题,因为它没有解释 OP 所遇到的错误。但是这个答案适用于那个问题,因此我将其反转了。希望现在清楚了。 - cs95

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接