标签: aggregate

Django聚合,计数总和

我有3个模型:论坛,线程,帖子和我正在创建一个视图来显示论坛列表.但我也想显示每个论坛的主题数和帖子数.

然后我必须:

  • 计算每个帖子的帖子数量
  • 将每个论坛的每个帖子的帖子数量相加

我在这里发现了类似的东西:Django:总结一个子子外来物的数量,但答案对我不起作用.

from django.shortcuts import render
from django.template import Context
from django.contrib.auth.decorators import login_required
from django.db.models import Count

from chinwag.models import Forum, Thread, Post

@login_required
def forums(request):
    forums = Forum.objects.annotate(num_posts=Count('threads__posts')).all(
            ).select_related('threads__last_post')
    return render(request, 'chinwag/forums.html', Context({
        'forums': forums,
    }))
Run Code Online (Sandbox Code Playgroud)

是否可以在1个SQL查询中执行此操作?怎么样?

python sql database django aggregate

4
推荐指数
1
解决办法
1964
查看次数

熊猫聚合-如何保留所有列

示例数据框:

rand = np.random.RandomState(1)
df = pd.DataFrame({'A': ['group1', 'group2', 'group3'] * 2,
                'B': rand.rand(6),
                'C': rand.rand(6),
                'D': rand.rand(6)})
Run Code Online (Sandbox Code Playgroud)

打印df

        A         B         C         D
0  group1  0.417022  0.186260  0.204452
1  group2  0.720324  0.345561  0.878117
2  group3  0.000114  0.396767  0.027388
3  group1  0.302333  0.538817  0.670468
4  group2  0.146756  0.419195  0.417305
5  group3  0.092339  0.685220  0.558690
Run Code Online (Sandbox Code Playgroud)

分组依据A列

group = df.groupby('A')
Run Code Online (Sandbox Code Playgroud)

使用agg返回每个组的最大值

max1 = group['B'].agg({'max' : np.max})
print max1

             max
A               
group1  0.417022
group2  0.720324
group3  0.092339
Run Code Online (Sandbox Code Playgroud)

但是我想保留(或取回)其他列C和D中的适当数据。这将是包含最大值的行的剩余数据。因此,返回值应为:

     A         B         C         D
group1  0.417022 …
Run Code Online (Sandbox Code Playgroud)

python aggregate pandas

4
推荐指数
1
解决办法
1591
查看次数

R中tapply和aggregate的区别是什么?

Aaa <- data.frame(amount=c(1,2,1,2,1,1,2,2,1,1,1,2,2,2,1), 
                  card=c("a","b","c","a","c","b","a","c","b","a","b","c","a","c","a"))

aggregate(x=Aaa$amount, by=list(Aaa$card), FUN=mean)

##   Group.1    x
## 1       a 1.50
## 2       b 1.25
## 3       c 1.60

tapply(Aaa$amount, Aaa$card, mean)

##    a    b    c 
## 1.50 1.25 1.60 
Run Code Online (Sandbox Code Playgroud)

以上是示例代码.

看来,aggregatetapply两者都非常方便,并执行类似的功能.

有人可以解释或举例说明他们之间的差异吗?

aggregate r tapply

4
推荐指数
1
解决办法
6318
查看次数

使用dplyr中的c()汇总字符串汇总或聚合

我想在dplyr中使用c()作为聚合函数来聚合一些字符串.我首先尝试了以下内容:

> InsectSprays$spray = as.character(InsectSprays$spray)
> dt = tbl_df(InsectSprays)
> dt %>% group_by(count) %>% summarize(c(spray))
Error: expecting a single value
Run Code Online (Sandbox Code Playgroud)

但是在aggregate()中使用c()函数有效:

> da = aggregate(spray ~ count, InsectSprays, c)
> head(da)
  count                  spray
1     0                   C, C
2     1       C, C, C, C, E, E
3     2             C, C, D, E>
Run Code Online (Sandbox Code Playgroud)

在stackoverflow中搜索暗示,使用带崩溃的paste()代替c()函数可以解决问题:

dt %>% group_by(count) %>% summarize(s=paste(spray, collapse=","))
Run Code Online (Sandbox Code Playgroud)

要么

dt %>% group_by(count) %>% summarize(paste( c(spray), collapse=","))
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么c()函数在aggregate()中工作但在dplyr summarize()中不起作用?

string aggregate r dplyr

4
推荐指数
1
解决办法
3684
查看次数

R基于来自一列的值汇总列中的唯一值

我想根据var_1的值知道每列的唯一值的总数.

例如:

Test <- data.frame(var_1 = c("a","a","a", "b", "b", "c", "c", "c", "c", "c"), var_2 = c("bl","bf","bl", "bl","bf","bl","bl","bf","bc", "bg" ), var_3 = c("cf","cf","eg", "cf","cf","eg","cf","dr","eg","fg"))
Run Code Online (Sandbox Code Playgroud)

我正在寻找的结果将基于var_1中的值,应该是:

var_1 var_2 var_3
a     2     2
b     2     1
c     3     4
Run Code Online (Sandbox Code Playgroud)

但是,在尝试了各种方法(包括apply和table)之后 - 聚合与我正在寻找的最接近的东西,但是这个脚本导致var_1的每个值的条目总数的摘要,但总数不是独特

agbyv1= aggregate(. ~ var_1, Test, length) 

var_1 var_2 var_3
a     3     3
b     2     2
c     5     5
Run Code Online (Sandbox Code Playgroud)

我试过了

unqbyv1= aggregate(. ~ var_1, Test, length(unique(x)))
Run Code Online (Sandbox Code Playgroud)

但那没用.

任何帮助是极大的赞赏.

aggregate r unique

4
推荐指数
1
解决办法
3212
查看次数

将2个字典项聚合成一个对象

我有一本包含评估答案的字典,如下所示:

{
    {"question1", "7"},
    {"question1_comment", "pretty difficult"},
    {"question2", "9"},
    {"question2_comment", ""},
    {"question3", "5"},
    {"question3_comment", "Never on time"},
}
Run Code Online (Sandbox Code Playgroud)

但是我需要将得分项和评论项组合成一个对象,如下所示

{
    {"question1", "7", "pretty difficult"},
    {"question2", "9", ""},
    {"question3", "5", "Never on time"},
}
Run Code Online (Sandbox Code Playgroud)

我想我需要使用Aggregate方法来解决这个问题,但我不知道从哪里开始.

.net c# dictionary aggregate

4
推荐指数
1
解决办法
135
查看次数

按日期进行有条件的分组

我有点麻烦这个问题.

我有两个表itemsstocks

items
id | name 
1  | item_1    
2  | item_2    

stocks
id | item_id | quantity | expired_on
1  |    1    |    5     |  2015-11-12
2  |    1    |    5     |  2015-11-13
3  |    2    |    5     |  2015-11-12
4  |    2    |    5     |  2015-11-14
Run Code Online (Sandbox Code Playgroud)

我希望能够检索按日期分组的大表,并且对于每个日期,按item_id分组,并显示未过期的数量总和.

result
date        | item_id | unexpired 
2015-11-11  |    1    |    10     
2015-11-11  |    2    |    10     
2015-11-12  |    1    |    5     
2015-11-12  |    2    |    5     
2015-11-13  | …
Run Code Online (Sandbox Code Playgroud)

sql postgresql aggregate

4
推荐指数
1
解决办法
73
查看次数

查找数据大写的范围的开始和结束

我有一个data.frame ystr:

    v1
1    a
2    B
3    B
4    C
5    d
6    a
7    B
8    D
Run Code Online (Sandbox Code Playgroud)

我想在CAPS中找到每组字母的开头和结尾,所以我的输出将是:

    groupId startPos    endPos
1   1       2           4
2   2       7           8
Run Code Online (Sandbox Code Playgroud)

通过按顺序查看每个元素并将其与之前的元素进行比较,我能够通过for循环来完成它,如下所示:

currentGroupId <-0

for (i in 1:length(ystr[,1])){ 
  if (grepl("[[:upper:]]", ystr[i,])) 
  { 
    if (startCounter == 0) 
    {
       currentGroupId <- currentGroupId +1
       startCounter <-1 
       mygroups[currentGroupId,] <- c(currentGroupId, i, 0)
    }
  }else if (startCounter == 1){
    startCounter <-0
    mygroups[currentGroupId,3]<- i-1
  }
}
Run Code Online (Sandbox Code Playgroud)

在R中有一种简单的方法吗?

这可能类似于Mark的开始和结束,但我无法弄清楚它在这种情况下是如何应用的.

aggregate r

4
推荐指数
1
解决办法
96
查看次数

快速滚动均值+总结

在R中,我试图使用不同的窗口宽度对一个大矢量(高达400k元素)进行非常快速的滚动均值,然后对于每个窗口宽度,按每年的最大值汇总数据.希望下面的例子很清楚.我已经尝试了几种方法,到目前为止最快的似乎是roll_mean从包RcppRoll中使用运行平均值,并aggregate选择最大值.请注意内存需求是一个问题:下面的版本需要非常少的内存,因为它一次只进行一次滚动均值和聚合; 这是首选.

#Example data frame of 10k measurements from 2001 to 2014
n <- 100000
df <- data.frame(rawdata=rnorm(n),
                 year=sort(sample(2001:2014, size=n, replace=TRUE))
                 ) 

ww <- 1:120 #Vector of window widths

dfsumm <- as.data.frame(matrix(nrow=14, ncol=121))
dfsumm[,1] <- 2001:2014
colnames(dfsumm) <- c("year", paste0("D=", ww))

system.time(for (i in 1:length(ww)) {
  #Do the rolling mean for this ww
  df$tmp <- roll_mean(df$rawdata, ww[i], na.rm=TRUE, fill=NA)
  #Aggregate maxima for each year
  dfsumm[,i+1] <- aggregate(data=df, tmp ~ year, max)[,2]
}) #28s on …
Run Code Online (Sandbox Code Playgroud)

aggregate r dataframe data.table rolling-computation

4
推荐指数
1
解决办法
393
查看次数

在R中分组后选择聚合列的第n个值

给出df如下:

  # group value
# 1     A     8
# 2     A     1
# 3     A     7
# 4     B     3
# 5     B     2
# 6     B     6
# 7     C     4
# 8     C     5

df <- structure(list(group = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 
3L), .Label = c("A", "B", "C"), class = "factor"), value = c(8L, 
1L, 7L, 3L, 2L, 6L, 4L, 5L)), .Names = c("group", "value"), class = "data.frame", row.names = c(NA, 
-8L))
Run Code Online (Sandbox Code Playgroud)

和索引的矢量(可能与 …

group-by aggregate r dataframe

4
推荐指数
1
解决办法
302
查看次数