• group_m.agg(['sum','mean','std']) Out[22]: sum mean std School S_1 956.2 63.746667 23.077474 S_2 1191.1 59.555000 17.589305
• def agg_f(f_mul,name,*args,**kwargs): def wrapper(x): return f_mul(x,*args,**kwargs) wrapper.__name__ = name return wrapper new_f = agg_f(f_test,'at_least_one_in_50_52',50,52) ...
• string_agg，array_agg 这两个函数的功能大同小异，只不过合并数据的类型不同。 https://www.postgresql.org/docs/9.6/static/functions-aggregate.htmlarray_agg(expression) 把表达式变成一个数组 一般配合 array...

string_agg，array_agg 这两个函数的功能大同小异，只不过合并数据的类型不同。
https://www.postgresql.org/docs/9.6/static/functions-aggregate.html

array_agg(expression)
把表达式变成一个数组 一般配合 array_to_string() 函数使用

string_agg(expression, delimiter)
直接把一个表达式变成字符串

案例：

create table jinbo.employee(empno smallint, ename varchar(20), job varchar(20), mgr smallint, hiredate date, sal bigint, comm bigint, deptno smallint);

insert into jinbo.employee(empno,ename,job, mgr, hiredate, sal, comm, deptno) values (7499, 'ALLEN', 'SALEMAN', 7698, '2014-11-12', 16000, 300, 30);

insert into jinbo.employee(empno,ename,job, mgr, hiredate, sal, comm, deptno) values (7566, 'JONES', 'MANAGER', 7839, '2015-12-12', 32000, 0, 20);

insert into jinbo.employee(empno,ename,job, mgr, hiredate, sal, comm, deptno) values (7654, 'MARTIN', 'SALEMAN', 7698, '2016-09-12', 12000, 1400, 30);

select * from jinbo.employee;
empno | ename  |   job   | mgr  |  hiredate  |  sal  | comm | deptno
-------+--------+---------+------+------------+-------+------+--------
7499 | ALLEN  | SALEMAN | 7698 | 2014-11-12 | 16000 |  300 |     30
7566 | JONES  | MANAGER | 7839 | 2015-12-12 | 32000 |    0 |     20
7654 | MARTIN | SALEMAN | 7698 | 2016-09-12 | 12000 | 1400 |     30
(3 rows)

1.查询同一个部门下的员工且合并起来

方法1：
select deptno, string_agg(ename, ',') from jinbo.employee group by deptno;

deptno |  string_agg
--------+--------------
20 | JONES
30 | ALLEN,MARTIN

方法2：
select deptno, array_to_string(array_agg(ename),',') from jinbo.employee group by deptno;
deptno | array_to_string
--------+-----------------
20 | JONES
30 | ALLEN,MARTIN

2、在1条件的基础上，按ename 倒叙合并

select deptno, string_agg(ename, ',' order by ename desc) from jinbo.employee group by deptno;
deptno |  string_agg
--------+--------------
20 | JONES
30 | MARTIN,ALLEN

3、按数组格式输出使用 array_agg

select deptno, array_agg(ename) from jinbo.employee group by deptno;
deptno |   array_agg
--------+----------------
20 | {JONES}
30 | {ALLEN,MARTIN}

4、array_agg 去重元素，例如查询所有的部门

select array_agg(distinct deptno) from jinbo.employee;
array_agg
-----------
{20,30}
(1 row)

#不仅可以去重，还可以排序

select array_agg(distinct deptno order by deptno desc) from jinbo.employee;
array_agg
-----------
{30,20}
(1 row)

5、array_agg 排序再array取值，例如查询每个部门第一个入职的人

select deptno, (array_agg(ename order by hiredate asc))[1] from jinbo.employee group by deptno;
deptno | array_agg
--------+-----------
20 | JONES
30 | ALLEN

展开全文
• Agg根据矢量数据在内存中生成像素图像。 关于该项目 反颗粒几何（AGG）是一个开放源代码的免费图形库，以工业标准C ++编写。 “许可”页面上描述了AGG的使用条款和条件。 AGG不依赖任何图形API或技术。 基本上，您...
• Agg-Sharp 是 Agg 的 .NET 移植。AGG 是一个开源的二维图形引擎。它提供一套结合了亚像素（subpixel accuracy）技术与反走样（anti-aliasing）技术的图形算法，实现高效率、高质量的二维图形处理功能。AGG 的另一个...
• poppler-agg 自述文件 介绍 poppler-agg 旨在为 poppler ( ) 库提供 AGG ( ) 渲染后端。 git 存储库包含两个分支。 (a) “master”，它是官方 poppler 存储库的克隆，以及 (b) “agg_support”，我用它来添加（你猜...
• ## AGG简介

千次阅读 2018-11-14 06:39:57
AGG是一个开源、高效的跨平台2D图形库。AGG的功能与GDI+的功能非常类似，但提供了比GDI+更灵活的编程接口，其产生的图形的质量也非常高(自称超过GDI+) 使用前AGG的准备工作 下载AGG库，它的家在...

AGG是一个开源、高效的跨平台2D图形库。AGG的功能与GDI+的功能非常类似，但提供了比GDI+更灵活的编程接口，其产生的图形的质量也非常高(自称超过GDI+)

### 使用前AGG的准备工作

1. 下载AGG库，它的家在http://www.antigrain.com，目前最高版本是AGG2.5
2. 解压，后面以[AGG]表示AGG的解压目录.
3. 把[AGG]\include加入到include搜索目录中
4. 把[AGG]\src里所有cpp加入到项目中（或者用makefile一起编译）
5. 另外，AGG还有一些其它组件，用到时也要把它们(都是些.h和.cpp文件)加入项目:
• 如果要用AGG的控件和窗体，要加入[AGG]\src\ctrl\*.cpp和[AGG]\src\platform\<OS>\*.cpp，头文件在[AGG]\include\ctrl和[AGG]\include\platform里
• 如果要用到TrueType字体显示，要加入[AGG]\font_win32_tt目录下的源码和头文件。利用freetype库，则是[AGG]\font_freetype目录。
• 如果要用到Generic Polygon Clipper库（一个区域剪裁计算库），加入[AGG]\gpc目录下的源码和头文件。

AGG图形显示原理见下图：

其中：

1. Vertex Source 顶点源，里面存放了一堆2D顶点以及对应的命令，如"MoveTo"、"LineTo"等。
2. Coordinate conversion pipeline 坐标转换管道，它可以变换Vertex Source中的顶点，比如矩阵变换，轮廓提取，转换为虚线等。
3. Scanline Rasterizer 把顶点数据（矢量数据）转换成一组水平扫描线，扫描线由一组线段(Span)组成，线段(Span)包含了起始位置、长度和覆盖率（可以理解为透明度）信息。AGG的抗锯齿（Anti-Aliasing）功能也是在这时引入的。
4. Renderers 渲染器，渲染扫描线(Scanline)中的线段(Span)，最简单的就是为Span提供单一颜色，复杂的有多种颜色(如渐变)、使用图像数据、Pattern等。
5. Rendering Buffer 用于存放像素点阵数据的内存块，这里是最终形成的图像数据。

要理解AGG的工作原理，先看一段代码：

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 #include "agg_basics.h"     #include "agg_rendering_buffer.h"     #include "agg_rasterizer_scanline_aa.h"     #include "agg_scanline_u.h"     #include "agg_renderer_scanline.h"     #include "agg_pixfmt_rgb.h"     #include "platform/agg_platform_support.h"     #include "agg_ellipse.h"     #include "agg_conv_contour.h"     #include "agg_conv_stroke.h"            class the_application : public agg::platform_support     {     public:         the_application(agg::pix_format_e format, bool flip_y) :             agg::platform_support(format, flip_y)         {         }                virtual void on_draw()         {             //Rendering Buffer             agg::rendering_buffer &rbuf = rbuf_window();             agg::pixfmt_bgr24 pixf(rbuf);                          // Renderers             typedef agg::renderer_base renderer_base_type;             renderer_base_type renb(pixf);                    typedef agg::renderer_scanline_aa_solid renderer_scanline_type;             renderer_scanline_type rensl(renb);                          // Vertex Source             agg::ellipse ell(100,100,50,50);                          // Coordinate conversion pipeline             typedef agg::conv_contour ell_cc_type;             ell_cc_type ccell(ell);                          typedef agg::conv_stroke ell_cc_cs_type;             ell_cc_cs_type csccell(ccell);                          // Scanline Rasterizer             agg::rasterizer_scanline_aa<> ras;             agg::scanline_u8 sl;                          // Draw             renb.clear(agg::rgba8(255,255,255));             for(int i=0; i<5; i++)             {                 ccell.width(i*20);                 ras.add_path(csccell);                 rensl.color( agg::rgba8(0,0,i*50));                 agg::render_scanlines(ras,sl,rensl);             }         }     };            int agg_main(int argc, char* argv[])     {         the_application app(agg::pix_format_bgr24, false);         app.caption("AGG Example. Anti-Aliasing Demo");                if(app.init(600, 400, agg::window_resize))         {             return app.run();         }         return -1;     }

编译这段代码的方法是（以VC为例）：

1. 新建空白GUI项目（就是有WinMain的项目）
2. 把[AGG]\src里所有*.cpp加入到项目中
3. 把[AGG]\src\platform\Win32\*.cpp加入到项目中
4. Ctrl+C/Ctrl+V 上面的代码
5. 编译！

显示效果：

我们先不管agg_main及agg::platform_support的问题，实际上agg::platform_support只是AGG给我们方便显示AGG图形用的，真正应用时几乎不会用到（后面会讲到怎样把AGG图形画到HDC上）。

现在我们只需要知道这个框架可以生成一个窗体，当窗体重画时会调用virtual void on_draw()就行了。

现在直接从on_draw()开始看

1. 通过rbuf_window()方法得到一个agg::rendering_buffer，它就是“Rendering Buffer”，是一块用于存放图像的内存块。通过pixfmt_bgr24包装，我们就可以以像素为单位存取图像。
2. agg::renderer_base和agg::renderer_scanline_aa_solid都属于"渲染器Renderer"。renderer_base为底层渲染器，它支撑起所有的高层渲染器。这里的renderer_scanline_aa_solid就是一个高层渲染器。
3. agg::ellipse是“顶点源Vertex Source”，这个顶点源呈现的是一个圆形。
4. agg::conv_contour和agg::conv_stroke作为“坐标转换管道Coordinate conversion pipeline”，conv_contour扩展轮廓线，conv_stroke只显示轮廓线（如果没有conv_stroke就会显示实心圆，可以去掉试试）。
5. agg::rasterizer_scanline_aa<>就是“Scanline Rasterizer”啦。
6. agg::render_scanlines函数执行这个AGG工作流程。
展开全文
• Dataframe:one twoa 1 xb 1 yc 2 yd 2 ze 3 zgrp = DataFrame.groupby('one')grp.agg(lambda x: ???) #or equivalent functionDesired output from grp.agg:one two1 x|y2 y|z3 zMy agg function be...

Dataframe:

one two

a 1 x

b 1 y

c 2 y

d 2 z

e 3 z

grp = DataFrame.groupby('one')

grp.agg(lambda x: ???) #or equivalent function

Desired output from grp.agg:

one two

1 x|y

2 y|z

3 z

My agg function before integrating dataframes was "|".join(sorted(set(x))). Ideally I want to have any number of columns in the group and agg returns the "|".join(sorted(set()) for each column item like two above. I also tried np.char.join().

Love Pandas and it has taken me from a 800 line complicated program to a 400 line walk in the park that zooms. Thank you :)

解决方案

You were so close:

In [1]: df.groupby('one').agg(lambda x: "|".join(x.tolist()))

Out[1]:

two

one

1 x|y

2 y|z

3 z

Expanded answer to handle sorting and take only the set:

In [1]: df = DataFrame({'one':[1,1,2,2,3], 'two':list('xyyzz'), 'three':list('eecba')}, index=list('abcde'), columns=['one','two','three'])

In [2]: df

Out[2]:

one two three

a 1 x e

b 1 y e

c 2 y c

d 2 z b

e 3 z a

In [3]: df.groupby('one').agg(lambda x: "|".join(x.order().unique().tolist()))

Out[3]:

two three

one

1 x|y e

2 y|z b|c

3 z a

展开全文
• ## string_agg 与array_agg

千次阅读 2019-07-31 16:30:23
string_agg 数据 imos=# select res_id, res_name from test; res_id | res_name --------+---------------- 1 | Root 10001 | EC_PAG 10002 | EC_PAG_GUOBIAO (3 rows) 普通string_agg imos=# selec...

# string_agg

## 实例1

• 数据
imos=# select res_id, res_name from test;
res_id |    res_name
--------+----------------
1 | Root
10001 | EC_PAG
10002 | EC_PAG_GUOBIAO
(3 rows)

• 普通string_agg
imos=# select string_agg(res_name,';') from test;
string_agg
----------------------------
Root;EC_PAG;EC_PAG_GUOBIAO
(1 row)

• 带有order by 的string_agg
imos=# select string_agg(res_name,';' order by res_name ) from test;
string_agg
----------------------------
EC_PAG;EC_PAG_GUOBIAO;Root
(1 row)

## 实例2

• 数据
postgres=# create table test(id int,name varchar(20));
CREATE TABLE
postgres=# insert into test values(1,'a');
INSERT 0 1
postgres=# insert into test values(1,'b');
INSERT 0 1
postgres=# insert into test values(1,'c');
INSERT 0 1
postgres=# insert into test values(2,'d');
INSERT 0 1
postgres=# insert into test values(2,'e');
INSERT 0 1
postgres=# select * from test;
id | name
----+------
1 | a
1 | b
1 | c
2 | d
2 | e
(5 rows)

• 不分组

postgres=# select string_agg(name,',') from test;
string_agg
------------
a,b,c,d,e
(1 row)

• 分组
postgres=# select id ,  string_agg(name,',') from test group by id;
id | string_agg
----+------------
2 | d,e
1 | a,b,c
(2 rows)

# array_agg

imos=# select array_agg(res_name) from test;
ERROR:  could not find array type for data type imos_name
imos=#
imos=#
imos=#
imos=# select array_agg(res_name::varchar) from test;
array_agg
------------------------------
{Root,EC_PAG,EC_PAG_GUOBIAO}
(1 row)

imos=#
imos=# select array_agg(res_name::varchar order by res_name ) from test;
array_agg
------------------------------
{EC_PAG,EC_PAG_GUOBIAO,Root}
(1 row)

展开全文
• 包括： 基于AGG算法库的通用图形接口设计.pdf AGG绝好资料.doc 介绍和推荐AGG.doc
• Elasticsearch AGG.pdf
• 学习agg的好文档，详细介绍了AGG的图形变换流程，很好的学习手册
• AGG使用入门，mht格式文件，学完基本上可以上手了
• 本文记录用TDM64-GCC（MingGW的变种）编译Agg2.5的过程。操作系统win8.1 64位，编译器TDM64-gcc。 首先，TDM64-GCC只提供了一套编译环境，还有一些posix命令没有提供，例如ls,rm等，简单的办法就是装Git，有一个...
• AGG在windows系统visual studio 2013平台编译及开发；已经上传了编译成功的AGG.lib， 使用时将include文件夹添加到链接库即可。
• array_agg(expression) 把表达式变成一个数组 一般配合 array_to_string() 函数使用 string_agg(expression, delimiter) 直接把一个表达式变成字符串 以某个字段group by分组，查询多个字段 （存在某些字段有...
• ## AGG入门

万次阅读 2013-08-16 14:06:53
AGG入门   一、配置开发环境   AGG入门（一） - 配置开发环境 AGG是一个高效的、高质量的、开源的矢量图形库，类似的有：GTK+的Cairo，Microsoft的GDI+。在三者中，AGG的性能是最高的（不讨论Skia和...
• string_agg In this article, we will explore the STRING_AGG function in SQL and we will also reinforce our learning with various examples. STRING_AGG function can be counted as a new member ...
• 1、函数：string_agg('' , '') 把字符串拼接成一行 ，例如： select string_agg(name, ',') from user 2、如果有参数不是字符串格式，可以转化一下,比如： id||'' select string_agg( id||'' , ',')from user...
• pandas groupby agg使用方法简单总结
• ## pandas 聚合函数agg

千次阅读 2020-06-28 16:24:51
今天看到pandas的聚合函数agg，比较陌生，平时的工作中处理数据的时候使用的也比较少，为了加深印象，总结一下使用的方法，其实还是挺好用的。 DataFrame.agg（func，axis = 0，* args，** kwargs） func : 函数，...
• ## spark agg算子使用

千次阅读 2019-06-17 19:02:04
1、agg(expers:column*) 返回dataframe类型 ，同数学计算求值 df.agg(max("age"), avg("salary")) df.groupBy().agg(max("age"), avg("salary")) 2、agg(exprs: Map[String, String])返回dataframe类型 ，同数学...
• pandas agg pandas版本迭代说明 不同列 同列重命名
• 保存&分享AGG图形库相关资料，文档+2.5源码

...