首页 > 解决方案 > 检查一列的值是否在熊猫中另一个numpy数组列的值中

问题描述

我有一个熊猫数据框

import pandas as pd
dt = pd.DataFrame({'id' : ['a', 'a', 'a', 'b', 'b'],
                   'col_a': [1,2,3,1,2],
                   'col_b': [2,2,[2,3],4,[2,3]]})

我想创建一个列来评估值col_a是否在col_b.

输出数据框应如下所示:

dt = pd.DataFrame({'id' : ['a', 'a', 'a', 'b', 'b'],
                   'col_a': [1,2,3,1,2],
                   'col_b': [2,2,[2,3],4,[2,3]],
                   'exists': [0,1,1,0,1]})

我怎么能那样做?

标签: pythonpandas

解决方案


您可以使用:

dt["exists"] = dt.col_a.isin(dt.col_b.explode()).astype(int)

explode包含列表的列并检查col_a isin它是否。最后投到int.

要得到

>>> dt
  id  col_a   col_b  exists
0  a      1       2       0
1  a      2       2       1
2  a      3  [2, 3]       1
3  b      1       4       0
4  b      2  [2, 3]       1 

如果需要逐行比较,您可以使用:

dt["exists"] = dt.col_a.eq(dt.col_b.explode()).groupby(level=0).any().astype(int)

它按行检查equality,如果any(分组的)exploded 值给出True,我们说它exists


推荐阅读