与Pandas DataFrame列列表进行比较

时间:2018-06-08 05:03:06

标签: python list pandas

我有一个像这样的数据帧:

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 个答案:

答案 0 :(得分:4)

错误的真正原因是并非所有列表都具有相同的大小,这会导致DataFrame.eq出现问题。

解决此问题的最佳方法是使用列表推导构建布尔掩码,然后使用它来索引df

df[[v == [1, 2] for v in df['col2'].tolist()]]

另一种选择是df.apply,但这并不像这一样快。