这里有一个例子:
np.random.seed(1)
df = pd.DataFrame({"x": np.random.random(size=10),
"y": np.arange(10)})
df["z"] = np.where(df.x < 0.5, 0, 1)
print 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
我想在mean
中添加一个新列df
,并为按x
和y
列分组的z
列的值计算平均值。我已经知道如何计算平均值:
tmp = df.groupby(["y", "z"]).mean()
但是,我无法找到如何将结果映射回新列mean
。
答案 0 :(得分:1)
使用transform
将groupby
操作的结果添加回列,transform
返回Series
,其索引与原始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