如何基于另一DataFrame的均值将ytest Series转换为布尔值?
解决方案
你可以通过以下两种方式实现需求,将固定的Value替换为对应CNPJ的历史均值,生成每行数值是否大于均值的布尔值结果:
方法一:索引映射(高效矢量化操作)
直接利用多级索引的第一级(CNPJ)匹配历史均值,再进行比较:
# 假设存储历史均值的DataFrame名为mean_df result = ytest > ytest.index.get_level_values(0).map(mean_df['Mean'])
原理:通过get_level_values(0)提取所有行的CNPJ索引,再用map从mean_df中获取对应CNPJ的历史均值,将均值广播到该CNPJ下的所有日期行,最后与ytest的数值做大于比较,返回与原ytest索引结构一致的布尔值Series。
方法二:GroupBy + Transform(贴近原代码逻辑)
如果希望沿用原代码的groupby+transform思路,可以这样修改:
# 假设存储历史均值的DataFrame名为mean_df result = ytest.groupby(level=0).transform(lambda x: x > mean_df.loc[x.name, 'Mean'])
原理:按第一级索引(CNPJ)分组,每个分组的x.name即为当前CNPJ,通过mean_df.loc[x.name, 'Mean']获取该CNPJ的历史均值,再与分组内的每个数值比较,transform会将结果还原为原多级索引结构。
内容的提问来源于stack exchange,提问作者Guilherme Rodrigues
相关产品推荐
相关产品推荐

