gpt4 book ai didi

python - 在具有多个列的单个 groupby 中聚合一堆不同的数据

转载 作者:太空宇宙 更新时间:2023-11-04 09:42:59 30 4
gpt4 key购买 nike

我在 Pandas 中有大量的数据框(比方说大学的类(class)),看起来像:

ID          name        credits     enrolled    ugrad/grad  year        semester
1 Math 4 62 ugrad 2016 Fall
2 History 3 15 ugrad 2016 Spring
3 Adv Math 3 8 grad 2017 Fall
...

我想按年和学期对其进行分组,然后获得一堆不同的汇总数据,但如果可以的话一次全部。例如,我想要类(class)总数、仅本科类(class)的数量以及给定学期的入学总和。我可以使用 value_counts 单独执行这些操作,但我想获得如下输出:

year        semester    count       count_ugrad total_enroll
2016 Fall # # #
Spring # # #
2017 Fall # # #
Spring # # #
...

这可能吗?

最佳答案

在这里,我为 Python 添加了一个新主题,并作为字典提供以加载到数据框中。

解决方案是组合 groupby 上的 agg() 方法,其中在字典中提供聚合,然后使用自定义聚合函数来满足您的 ugrad 要求:

def my_custom_ugrad_aggregator(arr):
return sum(arr == 'ugrad')

dict = {'name': {0: 'Math', 1: 'History', 2: 'Adv Math', 3: 'Python'}, 'year': {0: 2016, 1: 2016, 2: 2017, 3: 2017}, 'credits': {0: 4, 1: 3, 2: 3, 3: 4}, 'semester': {0: 'Fall', 1: 'Spring', 2: 'Fall', 3: 'Spring'}, 'ugrad/grad': {0: 'ugrad', 1: 'ugrad', 2: 'grad', 3: 'ugrad'}, 'enrolled': {0: 62, 1: 15, 2: 8, 3: 8}, 'ID': {0: 1, 1: 2, 2: 3, 3: 4}}
df =pd.DataFrame(dict)


ID credits enrolled name semester ugrad/grad year
0 1 4 62 Math Fall ugrad 2016
1 2 3 15 History Spring ugrad 2016
2 3 3 8 Adv Math Fall grad 2017
3 4 4 8 Python Spring ugrad 2017

print df.groupby(['year','semester']).agg({'name':['count'],'enrolled':['sum'],'ugrad/grad':my_custom_ugrad_aggregator})

给出:

               name                 ugrad/grad enrolled
count my_custom_ugrad_aggregator sum
year semester
2016 Fall 1 1 62
Spring 1 1 15
2017 Fall 1 0 8
Spring 1 1 8

关于python - 在具有多个列的单个 groupby 中聚合一堆不同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50954806/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com