import pandas as pd
data = pd.DataFrame({'name':['wencky','stany','barbio','barbio'],
'age':[29,29,3,10],
'gender':['w','m','m', 'w']})
# 1 transform可用,agg和apply得到NaN。
data["a"] = data.groupby("gender")["age"].agg(lambda x: x.mean())
# 输出
name age gender a
0 wencky 29 w NaN
1 stany 29 m NaN
2 barbio 3 m NaN
3 barbio 10 w NaN
data["a"] = data.groupby("gender")["age"].apply(lambda x: x.mean())
# 输出
name age gender a
0 wencky 29 w NaN
1 stany 29 m NaN
2 barbio 3 m NaN
3 barbio 10 w NaN
data["a"] = data.groupby("gender")["age"].transform(lambda x: x.mean())
# 输出
name age gender a
0 wencky 29 w 19.5
1 stany 29 m 16.0
2 barbio 3 m 16.0
3 barbio 10 w 19.5
# 2
data= data.groupby("gender")["age"].agg(lambda x: x.mean())
# 输出
gender
m 16.0
w 19.5
data= data.groupby("gender")["age"].apply(lambda x: x.mean())
# 输出
gender
m 16.0
w 19.5
data= data.groupby("gender")["age"].transform(lambda x: x.mean())
# 输出
0 19.5
1 16.0
2 16.0
3 19.5
# 3
data = data.groupby("gender").agg(lambda x: x["age"].mean())
# 报错
data = data.groupby("gender").apply(lambda x: x["age"].mean())
# 输出
gender
m 16.0
w 19.5
data = data.groupby("gender").transform(lambda x: x["age"].mean())
# 报错
# 4 该用法不可用
data["c"] = data.groupby("gender").agg(lambda x: x["age"].mean())
# 报错
data["c"] = data.groupby("gender").apply(lambda x: x["age"].mean())
# 输出
name age gender c
0 wencky 29 w NaN
1 stany 29 m NaN
2 barbio 3 m NaN
3 barbio 10 w NaN
data["c"] = data.groupby("gender").transform(lambda x: x["age"].mean())
# 报错
# 以下5-8用法使用agg均报错:valueError: Must produce aggregated value
# 5
data["b"]= data.groupby("gender")["age"].agg(lambda x: x+1)
# 输出
valueError: Must produce aggregated value
data["b"]= data.groupby("gender")["age"].apply(lambda x: x+1)
# 输出
name age gender b
0 wencky 29 w 30
1 stany 29 m 30
2 barbio 3 m 4
3 barbio 10 w 11
data["b"]= data.groupby("gender")["age"].transform(lambda x: x+1)
# 输出
name age gender b
0 wencky 29 w 30
1 stany 29 m 30
2 barbio 3 m 4
3 barbio 10 w 11
# 6 两种用法结果一致
data = data.groupby("gender")["age"].apply(lambda x: x+1)
data = data.groupby("gender")["age"].transform(lambda x: x+1)
# 输出
0 30
1 30
2 4
3 11
# 7
data = data.groupby("gender").apply(lambda x: x["age"]+1)
# 输出
gender
m 1 30
2 4
w 0 30
3 11
data = data.groupby("gender").transform(lambda x: x["age"]+1)
# 报错
# 8
data["d"] = data.groupby("gender").apply(lambda x: x["age"]+1)
# 报错
data["d"] = data.groupby("gender"). transform (lambda x: x["age"]+1)
# 报错
python:dataframe groupby后agg、apply、transfrom用法
最新推荐文章于 2024-04-28 21:22:27 发布