You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 19:15:22