【问题标题】:Comparisons with Pandas DataFrame columns of lists与 Pandas DataFrame 列表列的比较
【发布时间】:2018-11-18 02:27:54
【问题描述】:

我有一个这样的数据框 df:

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

【问题讨论】:

    标签: python list pandas


    【解决方案1】:

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

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

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

    另一种选择是df.apply,但这远没有这个快。

    【讨论】:

    • @NBC 不确定你在做什么,但你可能做错了(这个例子很好用)
    • @jezrael 那里的答案不适用于此问题,因为它没有解释 OP 遇到的错误。但是这个答案适用于那个问题,因此我把它颠倒了。希望现在清楚了。
    猜你喜欢
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多