简体   繁体   中英

how to choose multiple columns in aggregate functions?

I have data like this :

A,B,C,D
1,50,1 ,3.9
2,20,22,1.5
3,10,10,2.3
2,15,11,1.8
1,16,13,4.2

and I want to group them by A that I would take mean for B and C and sum for D .
the solution would be like this :

df = df.groupby(['A']).agg({
    'B': 'mean', 'C': 'mean', 'D': sum
})

I am asking about if there is a way to choose multiple columns for the same function rather than repeating it as in the case of B and C

If you require at most one aggregation per column, you can store the aggregations in a dict {func: col_list} , then unpack it when you aggregate.

d = {'mean': ['B', 'C'], sum: ['D']}

df.groupby(['A']).agg({col: f for f,cols in d.items() for col in cols})
#      B     C    D
#A                 
#1  33.0   7.0  8.1
#2  17.5  16.5  3.3
#3  10.0  10.0  2.3

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM