为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas 列表列,检查列表是否相交

Pandas 列表列,检查列表是否相交

波斯汪 2023-07-18 18:00:20
我有一个名为 的数据框,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,则应该是该列。因此,以下应该是结果数据框:TRUEnumbers_bnumbers_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 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

尝试设置交集:


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


0     True

1    False

2     True

dtype: bool

这对于重载的 pandas 布尔运算符效果很好,尽管它的性能不是特别好。


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


[set(a).intersection(b) for a, b in zip(df['numbers_a'], df['numbers_b'])]

# [True, False, True]


# To assign the result back

df['result'] = [

    set(a).intersection(b) for a, b in zip(df['numbers_a'], df['numbers_b'])]


查看完整回答
反对 回复 2023-07-18
  • 1 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信