【问题标题】:Julia - Selecting subset of a dataframe conditioned on a column in another dataframeJulia - 以另一个数据框中的列为条件选择数据框的子集
【发布时间】:2021-10-05 13:46:19
【问题描述】:

在 Julia 中,我有两个数据框,我想返回一个数据框,该数据框选择第一个数据框中的行,这些行在 Fund 列中有一个出现在第二个数据框中的基金。一个简单的例子是:

df1 = DataFrame(Fund = ["AAA", "AAA", "BBB", "CCC", "DDD"], 购买 = [1000, 500, 600, 800,900])

df2 = DataFrame(Fund = ["AAA", "CCC"], Totals =[1000,200])

我想返回的是:

df3 = DataFrame(Fund = ["AAA", "AAA","CCC"], Purchase = [1000, 500, 800])

我在 df1 中有大约 10 列和几千行 df2 中的“Fund”列将始终包含唯一资金,并且始终是 df1.Fund 的子集,并且可能包含超过 1,000 行

我是 Julia 的新手,创建了下面的函数,想知道是否有更好的方法来解决这个问题。

function newtransactions(df1,df2)
res = DataFrame([Any[],Any[]],["Fund", "Purchase"])
for t ∈ df2.Fund
    res = append!(res,subset(df1, :Fund => X-> (X .== t)))
end
return res

结束

【问题讨论】:

    标签: dataframe julia subset


    【解决方案1】:

    您需要执行innerjoin:

    julia> innerjoin(df1, df2, on=:Fund)
    3×3 DataFrame
     Row │ Fund    Purchase  Totals
         │ String  Int64     Int64
    ─────┼──────────────────────────
       1 │ AAA         1000    1000
       2 │ AAA          500    1000
       3 │ CCC          800     200
    

    请注意,如果您需要从第一个或第二个表中选择所有行,还有leftjoinrightjoin

    【讨论】:

    • 谢谢。我不需要 df2 的额外列(我的 df1 有 10 列,df2 有 6 列)。最有效的方法是对结果应用 select 函数,例如 select(innerjoin(df1, df2, on=:Fund), Not(:Totals))。从文档中我看不到在 innerjoin 函数中执行此操作的方法。
    • 怎么样`innerjoin(df1, df2[!,Not(:Totals)], on=:Fund)`
    • 非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 2023-01-07
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    相关资源
    最近更新 更多