Pandas MultiIndex重采样丢失静态datetime列,如何保留?
解决方案
你可以通过指定多列聚合规则的原生Pandas方法保留静态列TagDesAbdichtens,核心思路是对数值列用mean完成重采样计算,对静态列用first/last等聚合函数(因为它在每组Verbundzuordnung+ProjektIndex下是固定值,这些函数会保留原始值)。
方法一:直接使用agg()自定义聚合逻辑
# 构建聚合字典:数值列用mean,静态列取第一个值(因每组固定,结果不变) agg_rules = {} for col in all_merged.columns: if col == 'TagDesAbdichtens': agg_rules[col] = 'first' else: agg_rules[col] = 'mean' # 执行分组重采样与聚合 resampled_result = all_merged.groupby([ pd.Grouper(level='Verbundzuordnung'), pd.Grouper(level='ProjektIndex'), pd.Grouper(level='Datum', freq='H') ]).agg(agg_rules)
方法二:先提取静态映射再合并(适合复杂场景)
如果静态列的关联逻辑需要单独验证,也可以先导出映射表,重采样后再合并:
# 提取每组对应的唯一静态值 static_mapping = all_merged.reset_index()[ ['Verbundzuordnung', 'ProjektIndex', 'TagDesAbdichtens'] ].drop_duplicates() # 执行原重采样逻辑 resampled_data = all_merged.groupby([ pd.Grouper(level='Verbundzuordnung'), pd.Grouper(level='ProjektIndex'), pd.Grouper(level='Datum', freq='H') ]).mean().reset_index() # 合并静态列并恢复MultiIndex resampled_result = resampled_data.merge( static_mapping, on=['Verbundzuordnung', 'ProjektIndex'] ).set_index(['Verbundzuordnung', 'ProjektIndex', 'Datum'])
验证静态列唯一性(可选)
确保TagDesAbdichtens在每组Verbundzuordnung+ProjektIndex下确实唯一,避免聚合出错:
# 检查每组静态列的唯一值数量,最大值应为1 max_unique = all_merged.groupby(['Verbundzuordnung', 'ProjektIndex'])['TagDesAbdichtens'].nunique().max() print(f"每组静态列唯一值数量最大值: {max_unique}")
内容的提问来源于stack exchange,提问作者Krotonix
相关产品推荐
相关产品推荐

