gpt4 book ai didi

dataframe - 在 Julia 中检查 Dataframe 多列中的元素

转载 作者:行者123 更新时间:2023-12-02 02:25:38 26 4
gpt4 key购买 nike

我有一个关于在 DataFrame 上操作时在任何循环中使用条件的问题。

例如,我有一个数据框

df:

a b c

1 2 5
3 4 3
2 1 7
6 3 6
5 1 9

我正在尝试编写一个循环,该循环的条件是一次检查两个列(a 和 b),并且值 i 是否可用两列然后它应该从 c 列中获取值并将其存储在数组中。

我可以使用它稍后执行统计操作,例如查找数组的均值。

我为此任务编写了一个简化的代码片段:

for i in 1:5
result1 = Float64[]
result2 = Float64[]
if (df[:, :a] = i)
push!(result1, df[:, :c])
elseif (df[:, :b] = i)
push!(result2, df[:, :c])
end

unique!(result1)
unique!(result2)

result = vcat(result1, result2)

global mean_val = mean(result)
end

此处,i 值的范围为 1 到 5,对于每个值,a 和 b 列都将被检查是否存在,如果该值存在则c 列中的值应该被推送到相关的结果数组。

我已经尝试使用来自社区的一些其他建议,例如:

代码示例 1:


for i in 1:5
mean_val = mean(df[:, :c] for i in ("a", "b")
end

代码示例 2:

for i in 1:5
df.row = axes(df, 1)
mean_val = mean((filter(x->x[:a] == i || x[:b] == i ,df))[:c])
end

但是这些不起作用并返回所需的输出。

请指教我在代码中的错误。另外,请建议是否有任何文档解释了在语句中实现多个条件,以及访问 dataframe 元素以进行 julia 中的任何其他操作。

提前致谢

最佳答案

(我认为)您想要实现的第一种方法是使用 indexing syntax获取数据框的一个子集:

julia> using DataFrames
julia> df = DataFrame(a = rand(1:5, 10), b = rand(1:5, 10), c = rand(1:100, 10))
10×3 DataFrame
Row │ a b c
│ Int64 Int64 Int64
─────┼─────────────────────
1 │ 1 2 25
2 │ 5 4 72
3 │ 4 3 37
4 │ 4 3 46
5 │ 3 2 31
6 │ 3 5 43
7 │ 5 1 35
8 │ 5 2 54
9 │ 1 1 64
10 │ 1 4 57
julia> idx = (df.a .== 3) .| (df.b .== 3)
10-element BitArray{1}:
0
0
1
1
1
1
0
0
0
0

julia> filtered_c = df[idx, :c]
4-element Array{Int64,1}:
37
46
31
43

然后您可以根据过滤后的结果值计算您想要的任何统计数据:

julia> using Statistics

julia> mean(filtered_c)
39.25

做同样事情的另一种方法是使用 filter过滤要保留的行:

julia> filtered_df = filter(row -> (row.a==3 || row.b==3), df)
4×3 DataFrame
Row │ a b c
│ Int64 Int64 Int64
─────┼─────────────────────
1 │ 4 3 37
2 │ 4 3 46
3 │ 3 2 31
4 │ 3 5 43

# This way of writing things is equivalent to the previous one, but
# might be more readable in cases where the condition you're checking
# is more complex
julia> filtered_df = filter(df) do row
row.a == 3 || row.b == 3
end
4×3 DataFrame
Row │ a b c
│ Int64 Int64 Int64
─────┼─────────────────────
1 │ 4 3 37
2 │ 4 3 46
3 │ 3 2 31
4 │ 3 5 43

julia> mean(filtered_df.c)
39.25

关于dataframe - 在 Julia 中检查 Dataframe 多列中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65679167/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com