组向量化

时间:2019-01-04 13:11:11

标签: pandas grouping

我有一些值(X),它们属于各个组(G)。我希望(N)将每个值除以组中的最大值,如下表所示:

enter image description here

我尝试过:

df = pd.DataFrame({'X': [0.2, 0.3, 0.4, 0.5, 0.6, 0.7],
                   'G': [1,   1,   1,   2,   2,   2  ]})

def fun (X):
    Norm = 1 / max(X)
    return X * Norm

f = np.vectorize(fun, otypes=[float])

df['N']   = f(df['X']).groupby('G')

但这给出了:

TypeError: 'float' object is not iterable

2 个答案:

答案 0 :(得分:2)

您可以使用transform

df['N'] = df['X']/df.groupby('G')['X'].transform('max')

答案 1 :(得分:1)

您可以这样做:

df['N']  = df.groupby('G')['X'].apply(lambda x: x / x.max())