Pandas中市值与EBITDA季度数据除法计算结果异常求助
Pandas除法计算结果异常的排查与解决
可能的问题点及验证步骤
- 计算顺序或列名匹配错误:从错误结果166.2反推,存在除数被除数写反的可能性。直接计算筛选行的两种除法结果验证:
row = vysledek.loc[(vysledek.CP == "GRPN") & (vysledek.DATUM == "2024-06-20")].iloc[0] print(f"市值/EBITDA: {row['Market Capitalization'] / row['EBITDA last 4 quarters']}") print(f"EBITDA/市值: {row['EBITDA last 4 quarters'] / row['Market Capitalization']}") - 透视表聚合导致数值失真:透视表若错误使用
sum等聚合方式,会让Market Capitalization数值重复累加。检查该列的原始值:print(vysledek.loc[(vysledek.CP == "GRPN") & (vysledek.DATUM == "2024-06-20"), "Market Capitalization"]) - 重复行引发取值错误:合并透视表后可能存在重复的
CP+DATUM行,计算时取到了错误数据。检查筛选后的行数:print(len(vysledek.loc[(vysledek.CP == "GRPN") & (vysledek.DATUM == "2024-06-20")])) - 表格显示精度误导:表格展示的是四舍五入后的值,查看计算结果的完整浮点值:
full_value = vysledek.loc[(vysledek.CP == "GRPN") & (vysledek.DATUM == "2024-06-20"), "Market cap EBITDA multipl last 4 Q"].iloc[0] print(f"完整计算值: {full_value}")
对应解决方案
- 修正计算逻辑:确保是市值除以EBITDA,核对列名拼写:
vysledek["Market cap EBITDA multipl last 4 Q"] = vysledek["Market Capitalization"] / vysledek["EBITDA last 4 quarters"] - 调整透视表聚合规则:改用
first/last获取单值,避免错误求和:# 示例:重新生成透视表 pivot = original_df.pivot_table( index=["CP", "DATUM"], values="Market Capitalization", aggfunc="last" # 或"first",根据数据逻辑选择 ).reset_index() vysledek = vysledek.merge(pivot, on=["CP", "DATUM"], how="left", suffixes=("", "_pivot")) vysledek["Market Capitalization"] = vysledek["Market Capitalization_pivot"] - 清理重复行:去除重复的
CP+DATUM记录后再执行计算:vysledek = vysledek.drop_duplicates(subset=["CP", "DATUM"], keep="last")
内容的提问来源于stack exchange,提问作者Martin Kropacek
相关产品推荐
相关产品推荐

