簡體   English   中英

在 Pandas 中的組內標准化

[英]Normalize within groups in Pandas

我已經閱讀了幾個類似的問題,即使問題非常簡單,我也無法找到適合我具體嘗試的答案。 我有一組數據,其中包含一個分組變量 position 和該 position 的值:

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))表示,使得最小值和最大值屬於該組。

我知道如何使用dplyr中的R執行此操作:

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

我無法弄清楚如何使用pandas做到這一點我嘗試過進行分組和應用,但似乎沒有一個能復制我正在尋找的東西。

我們使用ptp進行transform (與 R dplyr中的mutate相同)(這是獲取 max 和 min 之間的差異)

import numpy as np

g=df.groupby('Sample').Depth
df['new']=(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

按樣本系列的值對數據框進行分組,將匿名 function 應用於執行最小最大歸一化的(拆分)深度系列的每個值,將結果分配給 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)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM