在熊猫的群体内规范化



我有一组数据,其中包含一个分组变量、一个位置和一个该位置的值:

Sample    Position    Depth
A         1           2
A         2           3
A         3           4
B         1           1
B         2           3
B         3           2

我想生成一个内部规范化深度的新列,如下所示:

Sample    Position    Depth    NormalizedDepth
A         1           2        0
A         2           3        0.5
A         3           4        1
B         1           1        0
B         2           3        1
B         3           2        0.5

这基本上由公式表示NormalizedDepth = (x - min(x))/(max(x)-min(x))使得最小值和最大值属于该组。

我知道如何在Rdplyr通过以下方式做到这一点:

depths %>% 
group_by(Sample) %>%
mutate(NormalizedDepth = 100 * (Depth - min(Depth))/(max(Depth) - min(Depth)))

我不知道如何使用pandas做到这一点.我尝试过分组和应用,但似乎都没有复制我正在寻找的东西。

我们有transform(与 Rdplyr中的mutate相同(与ptp(这是获取最大值和最小值之间的差异(

import numpy as np
g = df.groupby('Sample').Depth
(df.Depth-g.transform('min')) / g.transform(np.ptp)
0    0.0
1    0.5
2    1.0
3    0.0
4    1.0
5    0.5
Name: Depth, dtype: float64

按样本系列的值对数据框进行分组,对执行最小最大归一化的(拆分(深度序列的每个值应用匿名函数,将结果分配给df DataFrame的归一化深度系列(请注意,不太可能像上面的YOBEN_S答案那样有效(:

import pandas as pd    
df['NormalizedDepth'] = df.groupby('Sample').Depth.apply(lambda x: (x - min(x))/(max(x)-min(x)))

最新更新