将函数应用于 Dataframe 的块

Applying a function to chunks of the Dataframe

我有一个Dataframe (df)(例如-简化版)

              A    B 
 0           2.0   3.0
 1           3.0   4.0

并生成了 20 个 bootstrap 重采样,它们现在都在同一个 df 中,但 重采样编号不同。

                                A    B 
   
0     1             0           2.0   3.0
1     1             1           3.0   4.0
2     2             1           3.0   4.0
3     2             1           3.0   4.0
..    ..
..    .. 
39    20            0           2.0    3.0
40    20            0           2.0    3.0

现在我想在每个 Reample Nr 上应用某个函数。说:

C = sum(df['A'] * df['B']) / sum(df['B'] ** 2)

前景如下:

                                 A    B           C
0     1             0           2.0   3.0   Calculated Value X1
1     1             1           3.0   4.0   Calculated Value X1
2     2             1           3.0   4.0   Calculated Value X2
3     2             1           3.0   4.0   Calculated Value X2
..    ..
..    .. 
39    20            0           2.0    3.0  Calculated Value  X20
40    20            0           2.0    3.0  Calculated Value  X20

所以有 20 个不同的新值。

我知道有一个 df.iloc 命令,我可以在其中指定我的行选择 df.iloc[row, column] 但我想找到一个不需要为 20 个样本重复代码的命令. 我的目标是找到一个自动识别 Resample Nr. 的命令,然后计算每个 Resample Nr.

的函数

我该怎么做?

谢谢!

Resample Nr.(或level=1)上使用DataFrame.assign to create two new columns x and y that corresponds to df['A'] * df['B'] and df['B']**2, then use DataFrame.groupby,在transform上使用sum:

s = df.assign(x=df['A'].mul(df['B']), y=df['B']**2)\
      .groupby(level=1)[['x', 'y']].transform('sum')
df['C'] = s['x'].div(s['y'])

结果:

           A    B         C
0  1  0  2.0  3.0  0.720000
1  1  1  3.0  4.0  0.720000
2  2  1  3.0  4.0  0.750000
3  2  1  3.0  4.0  0.750000
39 20 0  2.0  3.0  0.666667
40 20 0  2.0  3.0  0.666667