簡體   English   中英

使用嵌套的 groupby 命令來轉換 pandas 中的列

[英]using nested groupby commands to transform column in pandas

我有以下簡單的數據框。

data = [['Cntrl', 0.844961, '201030'],
        ['Cntrl', 0.815331, '201030'],
        ['Exp', 1.530297, '201030'],
        ['Exp', 2.36416, '201030'],
        ['Cntrl', 1.867359, '201024'],
        ['Cntrl', 1.274295, '201024'],
        ['Exp', 0.7058, '201024'],
        ['Exp', 2.657393, '201024'],]

df = pd.DataFrame(data, columns=['Group', 'Value', 'Date'])
df

    Group   Value       Date
0   Cntrl   0.844961    201030
1   Cntrl   0.815331    201030
2   Exp     1.530297    201030
3   Exp     2.364160    201030
4   Cntrl   1.867359    201024
5   Cntrl   0.705800    201024
6   Exp     1.274295    201024
7   Exp     2.657393    201024

我想將每個日期的值除以該日期的最小Cntrl值,產生:


    Group   Value   Date
0   Cntrl   1.0363  201030
1   Cntrl   1.0000  201030
2   Exp     1.8769  201030
3   Exp     2.8996  201030
4   Cntrl   1.4654  201024
5   Cntrl   1.0000  201024
6   Exp     0.5538  201024
7   Exp     2.0853  201024

我收集到我可以使用以下方法將每個日期的所有值除以該日期所有值的最小值: df['Value'] = df.groupby('Date')['Value'].transform(lambda x: x / x.min())

但是,這會將兩個組值集中在一起,而不是專門使用Cntrl組來計算最小值。 有沒有辦法在 lambda 函數中嵌套一個額外的 groupby 調用,或者以不同的方式設置轉換來完成這個?

使用reindex進行groupby

df.Value /= df[df['Group'].eq('Cntrl')].groupby('Date')['Value'].min().reindex(df['Date']).values
df
Out[172]: 
   Group     Value    Date
0  Cntrl  1.036341  201030
1  Cntrl  1.000000  201030
2    Exp  1.876903  201030
3    Exp  2.899632  201030
4  Cntrl  1.465406  201024
5  Cntrl  1.000000  201024
6    Exp  0.553875  201024
7    Exp  2.085383  201024

一種選擇是獲取GroupDate的 groupby 輸出,然后計算Value列:

out = df.groupby(['Group', 'Date']).Value.min().loc['Cntrl']
df.assign(Value = df.Value/df.Date.map(out))

   Group     Value    Date
0  Cntrl  1.036341  201030
1  Cntrl  1.000000  201030
2    Exp  1.876903  201030
3    Exp  2.899632  201030
4  Cntrl  1.465406  201024
5  Cntrl  1.000000  201024
6    Exp  0.553875  201024
7    Exp  2.085383  201024

暫無
暫無

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

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