python - 检查一列的值是否在熊猫中另一个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]})
我怎么能那样做?
解决方案
您可以使用:
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)
它按行检查eq
uality,如果any
(分组的)explode
d 值给出True
,我们说它exists
。
推荐阅读
- python - 我想在 plotly (python) 中将数据显示为 x 轴上的百分比
- php - 如何在没有api的情况下获取json数据
- mysql - 如何从前一行的相同列值中选择列值最近减少的行?
- node.js - 渲染模板时同时提供文本和图像数据?
- authentication - xero oauth/Authorize 显示登录页面而不是请求访问
- spring-boot - @Test 类上的 MockMvc.perform 上的空指针异常
- swift - removeFromSubView 禁用交互
- c++ - 此示例中指定的这个 128 位 AES 密钥的格式是什么?
- python - 嵌套的 try-except 记录错误的异常
- sql - T-SQL 使用变更数据捕获在特定时间捕获表的最小日志序列号