pandas dataframe:由几列groupby,应用函数并映射结果

时间:2016-07-12 12:03:43

标签: python pandas

这里有一个例子:

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,并为按xy列分组的z列的值计算平均值。我已经知道如何计算平均值:

tmp = df.groupby(["y", "z"]).mean()

但是,我无法找到如何将结果映射回新列mean

1 个答案:

答案 0 :(得分:1)

使用transformgroupby操作的结果添加回列,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