如何按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
相关产品推荐
相关产品推荐

