1.用 pd.concat 将这三个数据连接在一起,同时指定每个数据的 key,这样就形成了多索引。接着按索引进行分组,就基本得到了需求数据的结构。
2.再增加“月度胜率”列,其中只间超额收益率有数据,其他行设置为空字符串。
3.最后用 style 的 format 将其他列设置为百分号格式。
代码如下(示例):
import pandas as pd
代码如下(示例):
import pandas as pd
df1 = pd.DataFrame({'1月':[0.1,0.05,0.3],
'2月':[0.2,0.1,0.4],
'3月':[0.01,-0.1,0.3],
'4月':[0.01,-0.05,-0.2]},
index=['2021年','2022年','2023年']
)
df2 = pd.DataFrame({'1月':[0.05,0.1,0.2],
'2月':[0.1,0.05,0.3],
'3月':[0.05,0.1,0.2],
'4月':[0.05,0.05,-0.3]},
index=['2021年','2022年','2023年']
)
df3 = df1 - df2
display(df1, df2, df3)
(
pd.concat([df1, df2, df3],
keys='基金收益率 基准收益率 超额收益率'.split()
)
.groupby(level=[1, 0])
.max()
.assign(月度胜率=lambda d:
d.apply(lambda s:
(
f'{sum(s>0)/len(s):.2%}'
if '超额收益率' in s.name
else ''
),
axis=1)
)
.style
.format('{:.2%}', subset=df1.columns)
)
这些代码用于处理基金数据,包括基金收益率、基准收益率和超额收益率,然后计算每月的最大值和月度胜率,并以格式化的方式呈现这些结果。