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

如何按df2的rank排序并填充df1均值构建新DataFrame

解决方案

步骤1:计算settlementPeriod的均值

先从df1中提取每个settlementPeriod对应的目标列均值,作为后续填充的基础数据:

# 替换"目标数值列"为你实际需要计算均值的字段名
period_mean = df1.groupby('settlementPeriod')['目标数值列'].mean().reset_index()

步骤2:按rank排序BM Unit ID

从df2中提取BM Unit ID,并按照rank列的顺序完成排序:

# 按rank升序排列,得到有序的设备ID列表
sorted_units = df2.sort_values('rank')['BM Unit ID'].tolist()

步骤3:构建并填充新DataFrame

将排序后的设备ID、df1中的所有日期,以及settlementPeriod的均值进行组合:

import pandas as pd

# 提取df1中所有唯一日期,替换"日期列"为实际日期字段名
all_dates = df1['日期列'].unique()

# 生成日期与settlementPeriod的全组合
date_period_comb = pd.MultiIndex.from_product(
    [all_dates, period_mean['settlementPeriod']],
    names=['日期', 'settlementPeriod']
).to_frame(index=False)

# 合并均值数据
date_period_with_mean = pd.merge(date_period_comb, period_mean, on='settlementPeriod', how='left')

# 为每个排序后的设备ID复制上述组合数据
new_df = pd.concat(
    [date_period_with_mean.assign(**{'BM Unit ID': unit}) for unit in sorted_units],
    ignore_index=True
)

# 可选:按设备ID、日期、时段排序,保证输出顺序规整
new_df = new_df.sort_values(['BM Unit ID', '日期', 'settlementPeriod'], ignore_index=True)

最终输出说明

生成的new_df会包含以下内容:

  • 完全按照df2中rank列排序的所有BM Unit ID
  • df1中所有日期与settlementPeriod的完整组合
  • 对应settlementPeriod的均值数据

内容的提问来源于stack exchange,提问作者Chetan Patel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:15:39