首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“朱莉娅”中条件的否定

“朱莉娅”中条件的否定
EN

Stack Overflow用户
提问于 2017-04-26 10:12:41
回答 3查看 1.1K关注 0票数 1

我想把数据收集到朱莉娅。我有DataArrays.DataArray{String,1}名为"brokenDf“,它包含我想从dataframe和dataframe "df”中删除的串行id。

我得到的最接近的是“发现”

df[findin(df[:serial],brokenDf),:];

但是,我不知道在这之后如何翻转它,或者我们是否在朱莉娅中有NOT IN命令。因此,它的工作方式类似于findNOTin()

如有任何建议,将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-28 18:35:19

一种解决方案是使用map()并创建一个Bool数组来对数据的行进行子集:

代码语言:javascript
运行
复制
using DataFrames
df = DataFrame(serial = 1:6, B = ["M", "F", "F", "M", "N", "N"]);

broken = [1,2,5];

df[DataArray{Bool}(map(x -> !(x in broken), df[:serial])),:]

产出如下:

代码语言:javascript
运行
复制
3×2 DataFrames.DataFrame
│ Row │ serial │ B   │
├─────┼────────┼─────┤
│ 1   │ 3      │ "F" │
│ 2   │ 4      │ "M" │
│ 3   │ 6      │ "N" │

注意,!否定您的布尔条件,所以!true == false

票数 1
EN

Stack Overflow用户

发布于 2017-04-26 10:43:59

下面应该做你想做的事:

代码语言:javascript
运行
复制
using DataFrames
df = DataFrame(A = 1:6, B = ["M", "F", "F", "M", "N", "N"]);

# Rows where B .== "M"
f1 = find(df[:, 2] .== "M");

# Rows where B is not "M"
f2 = find(df[:, 2] .!= "M");

# Rows where B is not "M" and is not "F"
f3 = reduce(&, (df[:, 2] .!= "F", df[:, 2] .!= "M"));

后者可以自动编写函数:

代码语言:javascript
运行
复制
# Define function
function find_is_not(x, conditions)
    temp = sum(x .!= conditions, 2);
    res  = find(temp .== length(conditions));
    return res;
end

# Rows where B is not "M" and is not "F" (with find_is_not)
f4 = find_is_not(df[:, 2], ["M" "F"]);
票数 1
EN

Stack Overflow用户

发布于 2019-04-21 14:26:53

使用列表理解的解决方案是:

代码语言:javascript
运行
复制
df = df[[!(i in brokenDf) for i in df.serial], :]

这将给出过滤后的DataFrame,其中df.serial不在brokenDf中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43631215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档