以下内容转载自:
---------------------
作者:喜东东cc
来源:优快云
原文:https://blog.youkuaiyun.com/qq_34105362/article/details/84345044
版权声明:本文为博主原创文章,转载请附上博文链接!
一、目的:
通过Pandas中的groupby和agg结合自定义函数,实现针对string型数据的聚合函数,即同一组别的唯一值,以数组形式返回(类似Hive中的collect_set函数)
二、实现
方法一:
1.groupby返回的是一个迭代器(key, keyvalue),需要For循环提取;
2.agg中每次传入的是一个key的所有keyvalue数据(若前面groupby步骤未对data进行字段筛选,即为data中所有数据)
3.使用collect_set时,groupby的key只能是一个字段;
---------------------
import pandas as pd
data = pd.DataFrame([['one','a'], ['one', 'b'], ['two', 'c'], ['two', 'd']], columns=['key', 'value'])
print('【原始数据】')
print(data)
print('【groupbyOject】')
groupOj = data.groupby('key')
for key, value in groupOj:
print(key)
print(value)
def collect_set(group):
return set(group.values)
print('【自定义collect_set】')
print(data.groupby('key').agg(collect_set))
方法二:
1.对于需要拼接的字段col,直接agg({‘col':sum}),col需要提前转换成str类型;
2.若需要分隔符,可以先对col字段进行处理:df.col+分隔符;
聚合方法size()和count()
size跟count的区别: size计数时包含NaN值,而count不包含NaN值
agg 方法将一个函数使用在一个数列上,然后返回一个标量的值。也就是说agg每次传入的是一列数据,对其聚合后返回标量。