gpt4 book ai didi

dataframe - Julia 数据帧 : Create new column sum of col values :x by :y

转载 作者:行者123 更新时间:2023-12-02 20:56:46 24 4
gpt4 key购买 nike

我有一个包含 x 和 y 次出现的 DataFrame 。我想计算 DataFrame 中每次出现的频率以及该组合所代表的 :y 出现的百分比。我现在已经有了第一部分,感谢 a previous question .

using DataFrames
mydf = DataFrame(y = rand('a':'h', 1000), x = rand('i':'p', 1000))
mydfsum = by(mydf, [:x, :y], df -> DataFrame(n = length(df[:x])))

这成功创建了一个列,用于计算每个 :x 值与每个 :y 值出现的频率。现在我需要能够生成一个新列来计算 :y 每个值出现的频率。接下来我可以使用以下方法创建一个新的 DataFrame:

mydfsumy = by(mydf, [:y], df -> DataFrame(ny = length(df[:x])))

DataFrames连接在一起。

mydfsum = join(mydfsum, mydfsumy, on = :y)

并创建百分比:yp

mydfsum[:yp] = mydfsum[:n] ./ mydfsum[:ny]

但这对于常见的数据管理问题来说似乎是一个笨拙的解决方法。在 R 中,我将使用 dplyr 在一行中完成所有这些操作:

mydf %>% groupby(x,y) %>% summarize(n = n()) %>% groupby(y) %>% mutate(yp = n/sum(n))

最佳答案

您可以用一行完成:

mydfsum = by(mydf, :y, df -> by(df, :x, dd -> DataFrame(n = size(dd,1), yp = size(dd,1)/size( df,1))))

或者,如果这变得难以阅读,您可以对匿名函数使用 do 表示法:

mydfsum = by(mydf,:y) 做 df
by(df, :x) 做 dd
DataFrame(n = 大小(dd,1), yp = 大小(dd,1)/大小(df,1))
结尾
结尾

您在 R 中所做的实际上是对 xy 执行第一个 by,然后改变输出的一列。您也可以这样做,但您需要先创建该列。在这里,我首先用零初始化 yp 列,然后用另一个 by 对其进行修改。

mydfsum = by(mydf,[:x,:y], df -> DataFrame(n = size(df,1), yp = 0.))
by(mydfsum, :y, df -> (df[:yp] = df[:n]/sum(df[:n])))

要了解更高级的数据操作,您可能需要查看 Query.jl

关于dataframe - Julia 数据帧 : Create new column sum of col values :x by :y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44007624/

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