假设我有两个简单的模型
project
t.string :title
vote
t.references :project
t.integer :value
Run Code Online (Sandbox Code Playgroud)
当我通过所有项目循环时,我也希望包括所有投票的总和,因为这样做
projects = Project.all
foreach project in projects
sum = project.votes.sum(:value)
...
Run Code Online (Sandbox Code Playgroud)
是不是真的有效.
有没有办法如何在没有手动编写SQL的情况下执行此操作?就像是
SELECT p.*, SUM(v.value)
FROM projects p
LEFT JOIN votes v
ON v.project_id = p.id
GROUP BY p.id
Run Code Online (Sandbox Code Playgroud) 我有一个数据框,其结构如下:
V1 V2 V3 V4
1 1.35 A 10241297 10459084
2 16.00 A 10241297 10459084
3 1.47 A 10241297 10459084
Run Code Online (Sandbox Code Playgroud)
我想基于V2,V3和V4对V1进行平均
我看到的所有聚合示例都是基于单个值处理聚合.
任何帮助表示赞赏
谢谢
这是一个应用程序特定的问题:django-filter,这里是对没有使用它的人的简要说明.
f = ProductFilter(request.GET, queryset=Product.objects.all())
Run Code Online (Sandbox Code Playgroud)
这条线为我们完成了所有过滤.ProductFilter是一个类,我们已经指定了过滤器(类似于表单的类).f是一个过滤器对象(基本上是我们要求的项目),其行为类似于列表.
现在,我想在这个对象上执行aggregate函数(Avg例如)f.您是否有任何想法如何实现?
每次我在data.frame上进行聚合时,我都默认使用"by = list(...)"参数.但我确实在stackoverflow和其他地方看到了解决方案,其中在"formula"参数中使用了tilde(〜).我有点看到"by"参数作为围绕这些变量的"枢轴".
在某些情况下,输出完全相同.例如:
aggregate(cbind(df$A, df$B, df$C), FUN = sum, by = list("x" = df$D, "y" = df$E))
AND
aggregate(cbind(df$A, df$B, df$C) ~ df$E, FUN = sum)
Run Code Online (Sandbox Code Playgroud)
两者之间有什么区别,你什么时候使用哪个?
包含日期,购买价值和销售价值的表格.我想计算每天购买和销售的数量,以及购买和销售的总数.我发现在data.table中这有点棘手.
date buy sell
2011-01-01 1 0
2011-01-02 0 0
2011-01-03 0 2
2011-01-04 3 0
2011-01-05 0 0
2011-01-06 0 0
2011-01-01 0 0
2011-01-02 0 1
2011-01-03 4 0
2011-01-04 0 0
2011-01-05 0 0
2011-01-06 0 0
2011-01-01 0 0
2011-01-02 0 8
2011-01-03 2 0
2011-01-04 0 0
2011-01-05 0 0
2011-01-06 0 5
Run Code Online (Sandbox Code Playgroud)
可以使用以下代码创建上述data.table:
DT = data.table(
date=rep(as.Date('2011-01-01')+0:5,3) ,
buy=c(1,0,0,3,0,0,0,0,4,0,0,0,0,0,2,0,0,0),
sell=c(0,0,2,0,0,0,0,1,0,0,0,0,0,8,0,0,0,5));
Run Code Online (Sandbox Code Playgroud)
我想要的结果是:
date total_buys total_sells
2011-01-01 1 0
2011-01-02 0 2
and so on
Run Code Online (Sandbox Code Playgroud)
此外,我还想了解购买和销售的总数: …
我正在努力识别Domain对象.
问题:
我的理解:
public class Company : IEntity
{
public int CompanyId {get;}
public string CompanyName {get;}
//.....
}
public class Site : IEntity
{
public int SiteId {get;}
public string SiteName {get;}
//.....
}
public class Contact : IEntity
{
public int ContactId {get;}
public string SurName {get;}
public bool MainSiteContact {get;}//Confused!! May be this is not the right place
//.....
}
public class SiteContact : IAggregate
{
public Site ASite { get; }
public …Run Code Online (Sandbox Code Playgroud) 我是熊猫的新手,我有一个这样的DataFrame:
name value
0 alpha a
1 beta b
2 gamma c
3 alpha a
4 beta b
5 beta a
6 gamma a
7 alpha c
Run Code Online (Sandbox Code Playgroud)
我想把它变成这样一种:
name a b c
0 alpha 2 0 1
1 beta 1 2 0
2 gamma 1 0 1
Run Code Online (Sandbox Code Playgroud)
也就是说我想按"名称"和"值"分组,然后计算它们,并为我找到的每个"值"值创建一列.
我有一个如下所示的数据框:
>>> df[['data','category']]
Out[47]:
data category
0 4610 2
15 4610 2
22 5307 7
23 5307 7
25 5307 7
... ... ...
Run Code Online (Sandbox Code Playgroud)
数据和类别都是数字,所以我能够这样做:
>>> df[['data','category']].mean()
Out[48]:
data 5894.677985
category 13.805886
dtype: float64
Run Code Online (Sandbox Code Playgroud)
而我正试图获得每个类别的平均值.它看起来很直接,但当我这样做时:
>>> df[['data','category']].groupby('category').mean()
Run Code Online (Sandbox Code Playgroud)
要么
>>> df.groupby('category')['data'].mean()
Run Code Online (Sandbox Code Playgroud)
它返回如下错误:
DataError: No numeric types to aggregate
Run Code Online (Sandbox Code Playgroud)
如果我用上面的两个函数替换,则没有错误.count().
我做错了什么?获得每个类别的平均值的正确方法是什么?
我有一个数据框,我需要转动,但数据框有重复的标识符,所以spread函数给出一个错误Error: Duplicate identifiers for rows (5, 6)
Dimension = c("A","A","B","B","A","A")
Date = c("Mon","Tue","Mon","Wed","Fri","Fri")
Metric = c(23,25,7,9,7,8)
df = data.frame(Dimension,Date,Metric)
df
Dimension Date Metric
1 A Mon 23
2 A Tue 25
3 B Mon 7
4 B Wed 9
5 A Fri 7
6 A Fri 8
library(tidyr)
df1 = spread(df, Date, Metric, fill = " ")
Error: Duplicate identifiers for rows (5, 6)
Run Code Online (Sandbox Code Playgroud)
然后我合并了行并粘贴了Metric:
dfa = aggregate(df[3], df[-3],
FUN = function(X) paste(unique(X), collapse=", ")) …Run Code Online (Sandbox Code Playgroud) 我已经看到了基本类型的并行聚合代码,例如
Parallel.For<int>(0, result.Count, () => 0, (i, loop, subtotal) =>
{
subtotal += result[i];
return subtotal;
},
(x) => Interlocked.Add(ref sum, x)
);
Run Code Online (Sandbox Code Playgroud)
我想知道是否有相同的列表/其他集合,例如:
List<Result> AllResults;
Parallel.ForEach(allIDs, (currentID) =>
{
subList.add(GetResultFor(currentID));
return subList;
},
(x) =>
{
lock(AllResults)
AllResults.AddRange(subList);
};
Run Code Online (Sandbox Code Playgroud)
我猜测没有什么好看和整洁,但我想不出另一种做法,当然不是通过一个标准的parralel.ForEach因为我不能想到你会怎么说"这个核心有这个范围,这个核心这个范围"....