python - 当我尝试总结按几个标准分组的几列时,R 中的aggregate 和 group_by 有什么区别

标签 python r porting

我正在尝试将一些 R 代码(不是我编写的)转换为项目的 python 代码。 R 代码使用aggregate() 进行一些分组求和,但是当我尝试使用.groupby 在Python 中复制该操作时,结果有所不同。 R 代码生成超过 479000 行的数据帧,而 Python 生成超过 489000 行的数据帧。

后来发现,R 也有这个 group_by() 函数,当在那个巨大的数据帧上使用时,结果与 Python 中的 .groupby 产生的结果相同

test <- df %>% group_by(A, B, C) %>% 
  summarise(D= sum(D, na.rm=TRUE), E= sum(E,na.rm=TRUE))


test <- aggregate(x=list(D= df$D, E= df$E), by=list(A= df$A, B= df$B, C=df$C), 
                  FUN=function(x) sum(x, na.rm=TRUE))
test= df.groupby(['A', 'B', 'C'],as_index=False)['D', 'E'].agg('sum')

我几乎可以肯定我没有搞砸编码,因为我从事的项目强调保密性,以上代码是我能提供的最好的代码,提前抱歉。

很明显,这些方法中至少有一种是错误的,并且两个函数必须以不同的方式运行才会导致这种情况。我真的很想知道它们之间的区别以及哪个函数在实现我所需要的方面是正确的(即)。非常感谢。

最佳答案

很难知道确切的原因,但这是 aggregatena.action 的一个潜在问题。默认情况下,它可以删除带有 NA 的行。一个选项是添加 na.action = na.pass

使用可重现的示例

set.seed(24)
df1 <- data.frame(col1 = rep(letters[1:4], each = 4), 
     col2 =  sample(c(1:5, NA), 16, replace = TRUE), col3 =  NA)

极端情况,其中一列全部不适用

aggregate(.~ col1, df1, sum, na.rm = TRUE)

Error in aggregate.data.frame(lhs, mf[-1L], FUN = FUN, ...) : no rows to aggregate

aggregate(.~ col1, df1, sum, na.rm = TRUE, na.action = na.pass)
#  col1 col2 col3
#1    a   13    0
#2    b    5    0
#3    c   11    0
#4    d   16    0

因此,根据列中任何位置的 NA 数量,该行可能会被删除,这将反射(reflect)在计算中

关于python - 当我尝试总结按几个标准分组的几列时,R 中的aggregate 和 group_by 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56983571/

相关文章:

python - 将相同的 x 轴标签传递给 matplotlib 条形图的子图

python - Flask Web 应用程序 : Filter table view by button

python - 如何在 Python 3 中交换两对字节

java - R 包 XLConnect 和 choose.files() 之间的奇怪交互

python - 如何配置Python脚本执行以在执行时打开输出窗口?

RcppArmadillo 和 arma 命名空间

r - 在R中逐行解析csv

c++ - 从 MSVC2015 更新 2 移植到 GCC 5.3 - SFINAE 错误

c - 相当于 Windows 中的 "sysconf(_SC_CLK_TCK)"

java - 将delphi二进制操作函数移植到java