Okay thanks for this. We were definitely mis-understanding what you wanted.
I think you want combine
or transform
with a GroupedDataFrame
. Iβm assuming you donβt just want the maximum of the KPI_1
and KPI_2
values, but rather want to make a transformation by group. This will do that
julia> using DataFramesMeta, Chain;
julia> df = DataFrame(
Item = ["a", "a", "b", "b"],
Name = ["searchLow", "searchUpp", "KPI_1", "KPI_2"],
Vel_B1_FTF = [NaN, 0.1, 0.4, NaN])
4Γ3 DataFrame
Row β Item Name Vel_B1_FTF
β String String Float64
ββββββΌβββββββββββββββββββββββββββββββ
1 β a searchLow NaN
2 β a searchUpp 0.1
3 β b KPI_1 0.4
4 β b KPI_2 NaN
julia> par = :Vel_B1_FTF;
julia> @chain df begin
groupby(:Item)
@transform max_in_group = begin
x = filter(!isnan, cols(par))
isempty(x) && return NaN
maximum(x)
end
end
4Γ4 DataFrame
Row β Item Name Vel_B1_FTF max_in_group
β String String Float64 Float64
ββββββΌβββββββββββββββββββββββββββββββββββββββββββββ
1 β a searchLow NaN 0.1
2 β a searchUpp 0.1 0.1
3 β b KPI_1 0.4 0.4
4 β b KPI_2 NaN 0.4
If you really just want the maximum of KPI_1
and KPI_2
, then yeah thatβs tough.
julia> function get_max(df, vals, namevar, keys)
x = df[!, vals]
n = df[!, namevar]
inds = findall(t -> t in keys, n)
# handle empty collection as needed
maximum(filter(!isnan, x[inds]))
end;
julia> get_max(df, par, :Name, ["KPI_1", "KPI_2"])
0.4
So there are two things that make this tough in Julia, unfortunately. The first is the lack of row indexing, which you can do in Matlab I guess. The second is that Julia propagates NaN
s in maximum while Matlab does not.
Propagation of NaN
s in Julia is presumably governed by IEEE rules, so no changing that.
Additionally, maximum
errors on an empty collection. This might actually be changeable. Maybe we should add a keyword argument for ifempty
in maximum
, similar to init
in sum
.