Pandas中的组内标准化

m3eecexj  于 2023-03-28  发布在  其他
关注(0)|答案(2)|浏览(291)

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

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))表示,使得最小值和最大值是该组的。
我知道如何在R中使用dplyr执行此操作,如下所示:

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

我不知道如何用pandas来实现这一点,我尝试过分组和应用,但似乎没有一个能复制我正在寻找的东西。

wko9yo5t

wko9yo5t1#

我们有transform(与R dplyr中的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
xqkwcwgp

xqkwcwgp2#

通过样本系列的值对 Dataframe 进行分组,将匿名函数应用于执行最小最大归一化的(分割)深度系列的每个值,将结果分配给df Dataframe 的NormalizedDepth系列(注意不太可能像上面的YOBEN_S’答案那样有效):

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

相关问题