基于DataFrame的输入值按规则分配至小时桶的Python实现需求
没问题,我来帮你实现这个Excel里的分配逻辑,用Python的pandas就能轻松搞定。咱们先理清楚核心逻辑:要做4次迭代,每次找到当前mins值最高的桶(如果多个值相同就取第一个),给它的计数i加1,再把mins除以新的i值。
完整代码实现
import pandas as pd # 初始化你提供的DataFrame df = pd.DataFrame({ 'p_hourly': ['2020-09-10 07:00:00', '2020-09-10 08:00:00', '2020-09-10 09:00:00', '2020-09-10 10:00:00'], 'mins': [60.0, 60.0, 60.0, 0.0] }) # 给每个桶添加初始计数i,默认都是1 df['i'] = 1 # 执行4次分配迭代 for _ in range(4): # 找到当前mins最大的行索引,idxmax会自动返回第一个最大值的索引 max_mins_idx = df['mins'].idxmax() # 更新该桶的i值:加1 new_i = df.loc[max_mins_idx, 'i'] + 1 df.loc[max_mins_idx, 'i'] = new_i # 更新该桶的mins值:原mins除以新的i df.loc[max_mins_idx, 'mins'] = df.loc[max_mins_idx, 'mins'] / new_i # 输出最终结果 print(df)
代码解释
- 初始化DataFrame:完全按照你给出的结构创建示例数据,确保和你的输入一致。
- 添加初始计数列:新增
i列,所有值设为1,对应每个桶的初始状态。 - 循环迭代分配:
- 用
df['mins'].idxmax()快速定位当前mins最大的行,这个方法天然支持“值相同取第一个”的需求,正好符合你的规则。 - 先更新该桶的
i值(加1),再用新的i值重新计算mins。
- 用
- 输出结果:最终会得到和Excel逻辑完全一致的分配结果。
运行这段代码后,你会得到如下输出:
p_hourly mins i 0 2020-09-10 07:00:00 10.0 3 1 2020-09-10 08:00:00 30.0 2 2 2020-09-10 09:00:00 30.0 2 3 2020-09-10 10:00:00 0.0 1
内容的提问来源于stack exchange,提问作者mysticBliss
相关产品推荐
相关产品推荐

