如何使用pandas对DataFrame按分组计算指标环比百分比变化
Pandas按分组计算环比百分比实现方案
核心逻辑
使用groupby对FN字段分组后,调用pandas内置的pct_change()方法直接计算组内AuM的环比变化率,最后将首行空值替换为符合要求的空字符串即可。
完整可运行代码
import pandas as pd # 构造示例输入df1 lst = [['01012021','A',10],['01012021','B',20],['01012021','A',12],['01012021','B',23]] df1 = pd.DataFrame(lst, columns=['Date','FN','AuM']) # 按FN分组计算环比变化率 df1['%_delta'] = df1.groupby('FN')['AuM'].pct_change() # 将首行的空值替换为空白字符串,匹配预期输出格式 df1['%_delta'] = df1['%_delta'].fillna('') # 得到目标df2 df2 = df1.copy()
注意事项
- 正式使用时如果你的数据需要按日期顺序计算环比,请先对每个
FN分组内的Date字段做升序排序,避免数据顺序错误导致计算结果不准,排序代码参考:# 先将日期字符串转为datetime类型避免排序错误 df1['Date'] = pd.to_datetime(df1['Date'], format='%d%m%Y') df1 = df1.sort_values(by=['FN', 'Date'], ascending=True) - 如果需要输出带百分号的格式,可以修改赋值逻辑:
df1['%_delta'] = df1.groupby('FN')['AuM'].pct_change().apply(lambda x: f"{x:.2%}" if pd.notna(x) else "")
内容的提问来源于stack exchange,提问作者Bsleon
相关产品推荐
相关产品推荐

