列表的熊猫列,检查列表是否相交

时间:2020-09-07 22:56:21

标签: python pandas dataframe

我有一个名为a的数据框,它具有以下结构:

df = pd.DataFrame({
    'id': [1, 2, 3],
    'numbers_a': [[2, 3, 5], [1, 2, 4], [4, 6, 9]],
    'numbers_b': [[2, 1, 3], [10, 11], [4, 5, 7]]
})
df

| id | numbers_a | numbers_b |
|----|-----------|-----------|
| 1  | [2, 3, 5] | [2, 1, 3] |
| 2  | [1, 2, 4] | [10, 11]  |
| 3  | [4, 6, 9] | [4, 5, 7] | 

我想向此数据帧添加一个名为result的新列,如果TRUE中的任何一个值位于numbers_b中,则应为numbers_a。因此,以下应该是结果数据帧:

| id | numbers_a | numbers_b | result |
|----|-----------|-----------|--------|
| 1  | [2, 3, 5] | [2, 1, 3] | TRUE   |
| 2  | [1, 2, 4] | [10, 11]  | FALSE  |
| 3  | [4, 6, 9] | [4, 5, 7] | TRUE   | 

我尝试使用下面的代码段,但所有值都为FALSE:

a['result'] = pd.DataFrame(a.numbers_b.tolist()).isin(a.numbers_a).any(1).astype(bool)

我该如何解决?预先感谢。

1 个答案:

答案 0 :(得分:2)

尝试设置交集:

// Properties.Resources.MyExeFile - Binary file located in application resources
using var module = ModuleDefMD.Load(Properties.Resources.MyExeFile);
if (module.IsILOnly)
{
   module?.Write(Path.Combine(CurrDir, "Build.exe"));
}

这对重载的pandas布尔运算符非常有效,尽管它并不是特别出色。


另一种方法涉及列表理解:

df['numbers_a'].map(set) & df['numbers_b'].map(set)

0     True
1    False
2     True
dtype: bool