001—pandas 合并基金收益率数据表

pandas 案例大全


思路

1.用 pd.concat 将这三个数据连接在一起,同时指定每个数据的 key,这样就形成了多索引。接着按索引进行分组,就基本得到了需求数据的结构。
2.再增加“月度胜率”列,其中只间超额收益率有数据,其他行设置为空字符串。
3.最后用 style 的 format 将其他列设置为百分号格式。


代码展示:

1.引入库

代码如下(示例):

import pandas as pd

2.读入数据

代码如下(示例):

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)

001—pandas 合并基金收益率数据表_第1张图片

3.过程代码

(
    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)
)

001—pandas 合并基金收益率数据表_第2张图片

总结

这段代码的主要目的是:

  1. 使用 pd.concat 将三个数据框(df1、df2、df3)连接成一个新的数据框,并为每个数据框添加一个层次化的索引,分别为
    ‘基金收益率’、‘基准收益率’ 和 ‘超额收益率’。
  2. 使用 groupby 方法,按照索引的第二层(level=1)和第一层(level=0)进行分组。
  3. 对每个分组使用 max 方法,计算每组中的最大值,这儿随便给了一个聚合函数,最小值其实也可以。
  4. 使用 assign 方法,添加一个新的列 ‘月度胜率’,该列的值是每组中超额收益率大于0的比例,格式化为百分比。
  5. 使用 style 属性对数据框进行样式化,使用 format 方法将数据框中的所有元素格式化为百分比,但仅在列为 df1
    的列(即其他列)上应用这个格式。

这些代码用于处理基金数据,包括基金收益率、基准收益率和超额收益率,然后计算每月的最大值和月度胜率,并以格式化的方式呈现这些结果。

你可能感兴趣的:(pandas,实战案例大全,pandas)