pandas apply vs agg vs transform

  1. Data Prepartion

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, 1, 2, 2],'B': [1, 2, 3, 4],'C': np.random.randn(4)})

2.先来一波正常聚合操作

1.求和 sum,计数(非去重:size 或者 len 都可以,去重的:pd.Series.nunique ),最大最小:max,min

df.groupby('A',as_index=False).agg({'B':{'B_S':sum,'B_C':size}})

df.groupby('A',as_index=False).agg({'B':{'B_S':sum,'B_C':len}})

df.groupby('A',as_index=False).agg({'B':{'B_S':sum,'B_C':pd.Series.nunique}})


----------
   A    B     
      B_C  B_S
0  1    2    3
1  2    2    7
存在mutilevel,需要自己重命名

df.columns=['A','B_C','B_S']
   A  B_C  B_C
0  1  2  3
1  2  2  7

3.apply 和 agg 有什么区别呢,agg 调用的时候要指定字段,apply 默认传入的是整个dataframe

df.groupby('A',as_index=False).agg({'B':{'B_S':sum}})
等价于
df.groupby('A',as_index=False).apply(lambda x:sum(x['B'])).reset_index()
function 1
def add(df):
    a=[','.join(map(str,df[i])) for i in df.columns]
    return pd.DataFrame(df[['C','B']])
df.groupby('A',as_index=False).apply(add)

df
          C
0  0.826834
1  1.121229
2  0.428046
3 -1.669947

function 2
def add(df):
    a=[','.join(map(str,df[i])) for i in df.columns]
    return pd.DataFrame({'A':a})

df.groupby('A',as_index=False).apply(add)

0                           1,1
1                           1,2
2  0.826834174612,1.12122858358
0                           2,2
1                           3,4
2  0.42804565743,-1.66994731973

不存在聚合操作的apply,会按照原先的DateFrame 输出,存在聚合操作的apply index表示所在分区的自增index.

4.transform 是针对输入的元素级别转换

df.groupby('A',as_index=False).transform(sum)

df
     B         C
0  3.0 -2.186667
1  3.0 -2.186667
2  7.0 -0.348783
3  7.0 -0.348783
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值