将函数应用于 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
我有一个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