标签: aggregate

具有多个聚合列和总计列的 SQL Server PIVOT

我想生成一个数据透视表,每个数据透视列有 2 个总和聚合。然后在枢轴列的右侧,我想要一些总列。最后,枢轴列的数量是动态的。我的首选结果如下:

所需输出

我的数据如下所示:

数据透视表示例的日期

这个答案来看,我已经非常接近解决它了。这是我所拥有的:

SELECT *
FROM (
    SELECT B.SiteID, R.BuildingID, C.*
    FROM Rooms R JOIN Buildings B
        ON R.BuildingID = B.BuildingID
    CROSS APPLY (
        VALUES(RTRIM(RoomType) + ' NASF', AreaNASF)
             ,(RTRIM(RoomType) + ' RSF', AreaRSF)
        ) C (Item,Value)
) src
PIVOT (
    SUM([Value])
    FOR [Item] IN ([CONFERENCE NASF], [CONFERENCE RSF], [OFFICE NASF], [OFFICE RSF], [STORAGE NASF], [STORAGE RSF])
) pvt
Run Code Online (Sandbox Code Playgroud)

其产生:

我已经走了多远

我的印象是我必须在 SQL 之外执行两行标题。我需要帮助的是如何添加总列数。STUFF另外,除了我在很多地方看到的解决方案之外,还有更好的动态列解决方案吗?

以下是创建示例数据的 SQL:

CREATE TABLE Buildings (
    BuildingID CHAR(12),
    SiteID CHAR(12),
    Name …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server pivot aggregate pivot-table

5
推荐指数
1
解决办法
5659
查看次数

在 R 中,指示每行中哪些列的值为“true”

我有以下数据框:

> db
# A tibble: 3 x 4
    x     y     z     w
  <lgl> <lgl> <lgl> <lgl>
1  TRUE FALSE  TRUE FALSE
2  TRUE FALSE  TRUE FALSE
3  TRUE FALSE  TRUE FALSE
Run Code Online (Sandbox Code Playgroud)

我想创建一个新列,其中每行存储等于 TRUE 的列,因此例如第 1 行将是 c(x,z) (例如以字符格式)。

dplyr 解决方案将不胜感激!

aggregate r dplyr

5
推荐指数
1
解决办法
3955
查看次数

Dataframe聚合方法传递列表问题

这可能是一个错误,但是您对此 pandas 功能有何看法:

df = pd.DataFrame(np.arange(20).reshape(10,-1), columns=[*'AB'])

def f(x):
    print(type(x))

df.agg(f)
Run Code Online (Sandbox Code Playgroud)

输出:

<class 'pandas.core.series.Series'>
<class 'pandas.core.series.Series'>
A    None
B    None
dtype: object
Run Code Online (Sandbox Code Playgroud)

但是,如果我将 agg 方法中的函数调用包装在括号中,将单个函数作为列表传递。

df = pd.DataFrame(np.arange(20).reshape(10,-1), columns=[*'AB'])

def f(x):
    print(type(x))


df.agg([f])
Run Code Online (Sandbox Code Playgroud)

输出:

<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
      A     B
      f     f
0  None …
Run Code Online (Sandbox Code Playgroud)

python aggregate pandas

5
推荐指数
1
解决办法
139
查看次数

如何将*多个*函数应用于pandas groupby apply?

我有一个数据框,应将其分组,然后在每个组上应用几个函数。通常,我会这样做groupby().agg()(参见将多个函数应用于多个 groupby 列),但我感兴趣的函数不需要一列作为输入,而是需要多列。

我了解到,当我有一个具有多列作为输入的函数时,我需要apply(参见使用多列的 Pandas DataFrame 聚合函数)。 但是,当我有多个具有多个列作为输入的函数时,我需要什么?

import pandas as pd
df = pd.DataFrame({'x':[2, 3, -10, -10], 'y':[10, 13, 20, 30], 'id':['a', 'a', 'b', 'b']})

def mindist(data): #of course these functions are more complicated in reality
     return min(data['y'] - data['x'])
def maxdist(data):
    return max(data['y'] - data['x'])
Run Code Online (Sandbox Code Playgroud)

我期待类似的东西df.groupby('id').apply([mindist, maxdist])

    min   max
id      
 a    8    10
 b   30    40
Run Code Online (Sandbox Code Playgroud)

(通过实现pd.DataFrame({'mindist':df.groupby('id').apply(mindist),'maxdist':df.groupby('id').apply(maxdist)}- 如果我有许多函数要应用于分组数据框,这显然不是很方便)。最初我以为这个OP有同样的问题,但他似乎对 很满意aggregate,这意味着他的函数只接受一列作为输入。

aggregate function apply pandas pandas-groupby

5
推荐指数
2
解决办法
9766
查看次数

R:每月汇总行数

我制作了一个数据框,其中有一列包含日期和一列包含数值。我希望这个数据框按月进行分组,并汇总每个相应月份其他列中的所有数值。

这是我的数据框示例:

capture.date  Test1  Test2  Test3
2016-03-18      0      1      1
2016-03-18      1      1      1
2016-03-20      2      1      1
2016-04-12      1      0      1
Run Code Online (Sandbox Code Playgroud)

我已经尝试过一些代码:

df %>% 
  group_by(capture.date) %>% 
  summarise_each(funs(sum))
Run Code Online (Sandbox Code Playgroud)

和:

aggregate(df[2:4], by=df["capture.date"], sum)
Run Code Online (Sandbox Code Playgroud)

但这两个选项都返回按每日日期而不是月份进行汇总的数据框。如何使其按月而不是按日汇总?

期望的输出:

capture.date  Test1  Test2  Test3
2016-03         3      3      3     
2016-04         1      0      1
Run Code Online (Sandbox Code Playgroud)

aggregate r dplyr

5
推荐指数
1
解决办法
1427
查看次数

PostgreSQL 窗口函数:如何引用当前行中的列与框架行中的列?

[数据库<>小提琴链接]

我有以下数据,group每行都有一个递增的index,并包含 alimit和 a value

CREATE TABLE items ("group" VARCHAR, index INTEGER, "limit" INTEGER, value INTEGER) ;

INSERT INTO items ("group", index, "limit", value) VALUES 
  ('A', 1, 2, 1), ('A', 2, NULL, 3), 
  ('B', 1, 3, 2), ('B', 2, NULL, 2), ('B', 3, 1, 3), ('B', 4, 2, 5), 
  ('C', 1, 2, 3), ('C', 2, 2, 3), ('C', 3, NULL, 4), ('C', 4, 5, 5) ;
Run Code Online (Sandbox Code Playgroud)
 group | index | limit …
Run Code Online (Sandbox Code Playgroud)

postgresql aggregate

5
推荐指数
0
解决办法
415
查看次数

Redshift SUPER 类型上的聚合

语境

我正在尝试找到在 Redshift 中表示和聚合高基数列的最佳方式。源是基于事件的,看起来像这样:

用户 时间戳 事件类型
1 2021-01-01 12:00:00
1 2021-01-01 15:00:00 酒吧
2 2021-01-01 16:00:00
2 2021-01-01 19:00:00

在哪里:

  • 用户数量非常多
  • 单个用户可以拥有大量事件,但不太可能拥有许多不同的事件类型
  • 不同event_type值的数量非常大,并且不断增长

我想将这些数据聚合成一个更小的数据集,每个用户只有一条记录(文档)。这些文件随后将被导出。感兴趣的聚合是这样的:

  • 活动数量
  • 最近活动时间

但是也:

  • 每个 event_type 的事件数

我发现后一种情况很困难。

我考虑过的解决方案

解决此问题的简单“列数据库友好”方法就是为每个事件类型创建一个聚合列:

用户 nb_事件 ... NB_foo nb_bar
1 2 ... 1 1
2 2 ... 2 0

但我认为这不是一个合适的解决方案,因为 event_type 字段是动态的,可能有数百或数千个值(Redshift 的上限为 1600 列)。而且,这个 event_type 字段上可能有多种类型的聚合(不仅仅是count)。

第二种方法是将数据保持垂直形式,其中不是每个用户一行,而是每个(user, event_type)一行。然而,这实际上只是推迟了问题——在某些时候,数据仍然需要聚合成每个用户的单个记录以实现目标文档结构,并且列爆炸的问题仍然存在。

该数据的更自然的(我认为)表示是稀疏数组/文档/SUPER:

用户 nb_事件 ... 按事件类型计数(超级)
1 2 ... …

aggregate correlated-subquery amazon-redshift

5
推荐指数
0
解决办法
1338
查看次数

Pandas .agg() 转换为列表但跳过 nan

如何合并/减少 DataFrame,以便它按自定义列“id”合并行,并将值放入列表中(如果它们不是 Nan)。到目前为止,我想出了这个,但它并没有删除 Nans:

x: pd.DataFrame = df_chunk.groupby('id', dropna=True).agg(lambda x: list(x))
for row in x.itertuples():
    print(row)
Run Code Online (Sandbox Code Playgroud)

所以结果是:

Pandas(Index=1, surname=['Bruce', nan, nan], given_name=['Erin', nan, nan], date_of_birth=['11/03/1961', '11/04/1961', '11/06/1961'], address=['10 Kestrel Wood Way, York', '4 Ward Avenue, Cowes', '11 Woodhill Court, Woodside Road, Amersham'], postcode=['YO31 9EJ', 'BD10 0LT', 'WA14 1LH'], mobile=['+64 21 421 2300', '+64 29 975 1551', '+64 22 5491 7112'])
Run Code Online (Sandbox Code Playgroud)

期望的结果是 surname=['Bruce']、given_name=['Erin'] 等等

aggregate nan dataframe python-3.x pandas

5
推荐指数
1
解决办法
1696
查看次数

如何在 C++ 中使用原始数组成员概括从 std::array 到 struct 的转换?

在 C++ 中,我有这个来自 C 的结构。这段代码非常旧,无法修改:

struct Point {
   double coord[3];
};
Run Code Online (Sandbox Code Playgroud)

另一方面,我有这个现代函数,它返回现代std::array而不是原始数组:

std::array<double, 3> ComputePoint();
Run Code Online (Sandbox Code Playgroud)

目前,为了Point从返回值初始化 a,我手动从 中提取每个元素std::array

std::array<double, 3> ansArray{ComputePoint()};
Point ans{ansArray[0], ansArray[1], ansArray[2]};
Run Code Online (Sandbox Code Playgroud)

这个解决方案是可行的,因为只有三个坐标。我可以将其模板化为一般长度吗?我想要类似相反的转换:std::to_array

c++ arrays aggregate initialization stdarray

5
推荐指数
1
解决办法
141
查看次数

将具有相同列名的矩阵中的列组合在一起

我有一个矩阵与列重复字符列名称.

set.seed(1)
m <- matrix(sample(1:10,12,replace=TRUE), nrow = 3, ncol = 4, byrow = TRUE,
       dimnames = list(c("s1", "s2", "s3"),c("x", "y","x","y")))

m
   x y  x  y
s1 3 4  6 10
s2 3 9 10  7
s3 7 1  3  2
Run Code Online (Sandbox Code Playgroud)

我需要将具有相同列名的所有列合并为一列,即

m <- matrix(c(9,14,13,16,10,3), nrow = 3, ncol = , byrow = TRUE,dimnames = list(c("s1", "s2", "s3"),c("x", "y")))

    x  y
s1  9 14
s2 13 16
s3 10  3
Run Code Online (Sandbox Code Playgroud)

我在聚合函数中有一个简单总和的游戏,但没有任何运气.有什么建议?谢谢.

aggregate r

4
推荐指数
2
解决办法
2183
查看次数