如果你需要的所有列乘以3
的使用slicers选择它们,然后重命名列名:
idx = pd.IndexSlice
df1 = df.loc[:, idx[:, 'LAST PRICE']].rename(columns={'LAST PRICE':'PriceVolume'}) * 3
print (df1)
ACA FP Equity UCG IM Equity
PriceVolume PriceVolume
2010-01-04 38.475 45.0876
2010-01-05 39.060 44.4276
2010-01-06 39.750 44.0502
2010-01-07 39.765 45.0876
2010-01-08 40.410 45.5121
,那么你需要concat
输出:
print (pd.concat([df,df1], axis=1))
ACA FP Equity UCG IM Equity ACA FP Equity \
LAST PRICE VOLUME LAST PRICE VOLUME PriceVolume
2010-01-04 12.825 5879617.0 15.0292 10844639.0 38.475
2010-01-05 13.020 6928587.0 14.8092 16456228.0 39.060
2010-01-06 13.250 5290631.0 14.6834 10446450.0 39.750
2010-01-07 13.255 5328586.0 15.0292 31900341.0 39.765
2010-01-08 13.470 7160295.0 15.1707 40750768.0 40.410
UCG IM Equity
PriceVolume
2010-01-04 45.0876
2010-01-05 44.4276
2010-01-06 44.0502
2010-01-07 45.0876
2010-01-08 45.5121
另一种解决方案,而concat
是从列selected_df
创建元组,然后分配输出:
idx = pd.IndexSlice
selected_df = df.loc[:, idx[:, 'LAST PRICE']]
new_cols = [(x, 'PriceVolume') for x in selected_df.columns.levels[0]]
print (new_cols)
[('ACA FP Equity', 'PriceVolume'), ('UCG IM Equity', 'PriceVolume')]
df[new_cols] = selected_df * 3
print(df)
ACA FP Equity UCG IM Equity ACA FP Equity \
LAST PRICE VOLUME LAST PRICE VOLUME PriceVolume
2010-01-04 12.825 5879617.0 15.0292 10844639.0 38.475
2010-01-05 13.020 6928587.0 14.8092 16456228.0 39.060
2010-01-06 13.250 5290631.0 14.6834 10446450.0 39.750
2010-01-07 13.255 5328586.0 15.0292 31900341.0 39.765
2010-01-08 13.470 7160295.0 15.1707 40750768.0 40.410
UCG IM Equity
PriceVolume
2010-01-04 45.0876
2010-01-05 44.4276
2010-01-06 44.0502
2010-01-07 45.0876
2010-01-08 45.5121
感谢您的编辑答案。 – jezrael