如何在LINQ中执行GroupBy多列
SQL中与此类似的东西:
SELECT * FROM <TableName> GROUP BY <Column1>,<Column2>
Run Code Online (Sandbox Code Playgroud)
如何将其转换为LINQ:
QuantityBreakdown
(
MaterialID int,
ProductID int,
Quantity float
)
INSERT INTO @QuantityBreakdown (MaterialID, ProductID, Quantity)
SELECT MaterialID, ProductID, SUM(Quantity)
FROM @Transactions
GROUP BY MaterialID, ProductID
Run Code Online (Sandbox Code Playgroud) 此常见问题解答涉及聚合和POD,并涵盖以下材料:
基本上问题是如何从中得到:
foo_id foo_name 1 A 1 B 2 C
对此:
foo_id foo_name 1 A B 2 C
public class ConsolidatedChild
{
public string School { get; set; }
public string Friend { get; set; }
public string FavoriteColor { get; set; }
public List<Child> Children { get; set; }
}
public class Child
{
public string School { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public string Friend { get; set; }
public string Mother { get; set; }
public string FavoriteColor { get; set; }
} …
Run Code Online (Sandbox Code Playgroud) 我有一个data.frame
,我需要计算每组的平均值(即每个Month
,下面).
Name Month Rate1 Rate2
Aira 1 12 23
Aira 2 18 73
Aira 3 19 45
Ben 1 53 19
Ben 2 22 87
Ben 3 19 45
Cat 1 22 87
Cat 2 67 43
Cat 3 45 32
Run Code Online (Sandbox Code Playgroud)
我的期望的输出是像下面,其中对于所述的值Rate1
和Rate2
是组装置.请忽略这个值,我已经为这个例子做了补充.
Name Rate1 Rate2
Aira 23.21 12.2
Ben 45.23 43.9
Cat 33.22 32.2
Run Code Online (Sandbox Code Playgroud) 从数据帧,是否有聚集(一个简单的方法sum
,mean
,max
同时等c)中多个变量?
以下是一些示例数据:
library(lubridate)
days = 365*2
date = seq(as.Date("2000-01-01"), length = days, by = "day")
year = year(date)
month = month(date)
x1 = cumsum(rnorm(days, 0.05))
x2 = cumsum(rnorm(days, 0.05))
df1 = data.frame(date, year, month, x1, x2)
Run Code Online (Sandbox Code Playgroud)
我想同时按年和月汇总数据框中的变量x1
和x2
变量df2
.以下代码聚合x1
变量,但是是否也可以同时聚合x2
变量?
### aggregate variables by year month
df2=aggregate(x1 ~ year+month, data=df1, sum, na.rm=TRUE)
head(df2)
Run Code Online (Sandbox Code Playgroud)
任何建议将不胜感激.
我在使用dplyr语法时遇到了一些麻烦.我有一个包含不同变量和一个分组变量的数据框.现在我想使用R中的dplyr计算每个组中每列的平均值.
df <- data.frame(
a = sample(1:5, n, replace = TRUE),
b = sample(1:5, n, replace = TRUE),
c = sample(1:5, n, replace = TRUE),
d = sample(1:5, n, replace = TRUE),
grp = sample(1:3, n, replace = TRUE)
)
df %>% group_by(grp) %>% summarise(mean(a))
Run Code Online (Sandbox Code Playgroud)
这给出了"grp"表示的每个组的列"a"的平均值.
我的问题是:是否有可能同时获得每个组中每列的方法?或者我必须df %>% group_by(grp) %>% summarise(mean(a))
为每一栏重复一次?
我想拥有的是什么
df %>% group_by(grp) %>% summarise(mean(a:d)) # "mean(a:d)" does not work
Run Code Online (Sandbox Code Playgroud) 我正在使用这个数据框:
Fruit Date Name Number
Apples 10/6/2016 Bob 7
Apples 10/6/2016 Bob 8
Apples 10/6/2016 Mike 9
Apples 10/7/2016 Steve 10
Apples 10/7/2016 Bob 1
Oranges 10/7/2016 Bob 2
Oranges 10/6/2016 Tom 15
Oranges 10/6/2016 Mike 57
Oranges 10/6/2016 Bob 65
Oranges 10/7/2016 Tony 1
Grapes 10/7/2016 Bob 1
Grapes 10/7/2016 Tom 87
Grapes 10/7/2016 Bob 22
Grapes 10/7/2016 Bob 12
Grapes 10/7/2016 Tony 15
Run Code Online (Sandbox Code Playgroud)
我希望通过名称然后通过水果来汇总这个,以获得每个名字的水果总数.
Bob,Apples,16 ( for example )
Run Code Online (Sandbox Code Playgroud)
我尝试按名称和水果分组,但我如何获得水果总数.
我有一个数据帧,我想计算每组内的行数.我通常使用该aggregate
函数对数据求和如下:
df2 <- aggregate(x ~ Year + Month, data = df1, sum)
Run Code Online (Sandbox Code Playgroud)
现在,我想计算观察结果,但似乎无法找到适当的论据FUN
.直觉上,我认为它会如下:
df2 <- aggregate(x ~ Year + Month, data = df1, count)
Run Code Online (Sandbox Code Playgroud)
但是,没有这样的运气.
有任何想法吗?
一些玩具数据:
set.seed(2)
df1 <- data.frame(x = 1:20,
Year = sample(2012:2014, 20, replace = TRUE),
Month = sample(month.abb[1:3], 20, replace = TRUE))
Run Code Online (Sandbox Code Playgroud) 给出以下(完全矫枉过正的)数据框示例
import pandas as pd
import datetime as dt
df = pd.DataFrame({
"date" : [dt.date(2012, x, 1) for x in range(1, 11)],
"returns" : 0.05 * np.random.randn(10),
"dummy" : np.repeat(1, 10)
})
Run Code Online (Sandbox Code Playgroud)
是否存在将两个不同的聚合函数应用于同一列的现有内置方法,而无需agg
多次调用?
语法上错误但直观正确的方法是:
# Assume `function1` and `function2` are defined for aggregating.
df.groupby("dummy").agg({"returns":function1, "returns":function2})
Run Code Online (Sandbox Code Playgroud)
显然,Python不允许重复键.是否还有其他表达输入的方式agg
?也许一个元组列表[(column, function)]
会更好,允许多个函数应用于同一列?但它似乎只接受一本字典.
除了定义一个仅应用其中的两个函数的辅助函数之外,还有一个解决方法吗?(无论如何,它如何与聚合一起工作?)