Python pandas dataframe:按多个列分组,应用函数并映射回结果
这里有一个例子:Python pandas dataframe:按多个列分组,应用函数并映射回结果,python,pandas,Python,Pandas,这里有一个例子: np.random.seed(1) df=pd.DataFrame({“x”:np.random.random(大小=10), “y”:np.arange(10)}) df[“z”]=np.式中(df.x
np.random.seed(1)
df=pd.DataFrame({“x”:np.random.random(大小=10),
“y”:np.arange(10)})
df[“z”]=np.式中(df.x<0.5,0,1)
打印df
它给出了以下结果:
x y z
0 0.417022 0 0
1 0.720324 1 1
2 0.000114 2 0
3 0.302333 3 0
4 0.146756 4 0
5 0.092339 5 0
6 0.186260 6 0
7 0.345561 7 0
8 0.396767 8 0
9 0.538817 9 1
我想在df
中添加一个新列mean
,其中计算的x
列的平均值按y
和z
列分组。我已经知道如何计算平均值:
tmp = df.groupby(["y", "z"]).mean()
但是,我无法找到如何将结果映射回一个新列
mean使用transform
将groupby
操作的结果添加回一列,transform
返回一个序列,其索引与原始df对齐:
In [15]:
df['mean'] = df.groupby(["y", "z"]).transform('mean')
df
Out[15]:
x y z mean
0 0.423578 0 0 0.423578
1 0.270675 1 0 0.270675
2 0.707611 2 1 0.707611
3 0.589192 3 1 0.589192
4 0.768653 4 1 0.768653
5 0.420577 5 0 0.420577
6 0.930490 6 1 0.930490
7 0.380576 7 0 0.380576
8 0.055940 8 0 0.055940
9 0.678355 9 1 0.678355