【发布时间】:2016-11-10 03:30:00
【问题描述】:
我有一个带有多索引的数据框,这样我就可以轻松地创建一个使用来自多列的数据作为输入的函数:
df = pd.DataFrame({('ALSN','VA.M'):range(5), ('ALSN','VB.M'):np.arange(5)+2,
('ALVY','VA.M'):range(5), ('ALVY','VB.M'):np.arange(5)+20,
('ALSN', 'VP.M'):np.arange(5)-10, ('ALVY','VP.M'):np.arange(5)-30,
('ALGG', 'VP.M'):np.arange(5)/5.})
ALGG ALSN ALVY
VP.M VA.M VB.M VP.M VA.M VB.M VP.M
0 0.0 0 2 -10 0 20 -30
1 0.2 1 3 -9 1 21 -29
2 0.4 2 4 -8 2 22 -28
3 0.6 3 5 -7 3 23 -27
4 0.8 4 6 -6 4 24 -26
我想对此进行过滤,然后将一个函数应用于 VA.M 和 VB.M 列:
df2 = g.filter(lambda z: z.name[-1] != 'G')
df2.groupby(level=0, axis=1).apply(lambda g: pd.Series(g[g.name]['VB.M']+g[g.name]['VA.M']))
ALSN ALVY
0 2 20
1 4 22
2 6 24
3 8 26
4 10 28
所以,到目前为止一切顺利。 但是,我真正想做的是构建一个函数,该函数将多列作为输入(如上),然后输出多列。因此,例如,它可以对 VA.M 和 VB.M 列求和,然后将平方根和立方根作为新列返回。
显然,我可以使用两个不同的应用函数(计算总和,然后计算平方根或立方根)来完成此操作,但我只想执行一次中间步骤(计算总和)。这可能吗?
此外,我希望将输出存储回数据框中,例如,列 ('ALSN', 'V2') 和 ('ALSN', 'V3') 可以在同时申请?还是我需要计算 V2 或 V3 列,然后获取结果数据帧并与原始数据帧合并?
【问题讨论】: