使用嵌套的 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

我收集到我可以将每个日期的所有值除以该日期的 all 所有值的最小值,使用: df['Value'] = df.groupby('Date')['Value'].transform(lambda x: x / x.min())

但是,这会将两个组的值合并在一起,而不是专门使用 Cntrl 组来计算最小值。有没有办法将额外的 groupby 调用嵌套到 lambda 函数中,或者以不同的方式设置转换来完成此操作?

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