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

使用Python Pandas按序列插入行:补全ClickMonth并填充ClickRate

嘿,我来帮你搞定这个数据集补全的问题!用Python的pandas就能轻松实现,完全符合你要的规则——前期缺失的ClickRate填0.00,后期缺失的沿用前一个有效数值。具体步骤如下:

解决方案:用Pandas补全ClickMonth连续序列并填充缺失值

1. 加载原始数据

首先把你的原始数据转换成pandas的DataFrame:

import pandas as pd

# 你的原始数据
raw_data = [
    ["2017-05", 23, 4, 14.982306],
    ["2017-05", 23, 18, 19.253211],
    ["2017-05", 23, 22, 19.793899],
    ["2017-06", 22, 3, 20.346334],
    ["2017-06", 22, 5, 22.545454]
]

df = pd.DataFrame(raw_data, columns=["Month", "MonthOnBook", "ClickMonth", "ClickRate"])

2. 生成每个分组的完整ClickMonth序列

我们需要按Month和MonthOnBook分组,为每个组生成从1到该组最大ClickMonth的连续序列:

# 先获取每个分组的最大ClickMonth值
grouped_max_cm = df.groupby(["Month", "MonthOnBook"])["ClickMonth"].max().reset_index()

# 为每个分组构建完整的ClickMonth序列
full_data = []
for _, group_info in grouped_max_cm.iterrows():
    current_month = group_info["Month"]
    current_mob = group_info["MonthOnBook"]
    max_cm = group_info["ClickMonth"]
    
    # 生成1到max_cm的连续整数序列
    cm_sequence = pd.DataFrame({
        "Month": [current_month] * max_cm,
        "MonthOnBook": [current_mob] * max_cm,
        "ClickMonth": range(1, max_cm + 1)
    })
    full_data.append(cm_sequence)

# 把所有分组的完整序列合并成一个DataFrame
full_df = pd.concat(full_data, ignore_index=True)

3. 合并原始数据并按规则填充缺失值

现在把原始数据和完整序列左连接,然后按你的规则填充ClickRate:

# 左连接保留完整序列的所有行,匹配原始数据中的有效ClickRate
merged_df = pd.merge(full_df, df, on=["Month", "MonthOnBook", "ClickMonth"], how="left")

# 填充缺失值:先向后填充(沿用前一个有效值),再把开头的缺失值补0.00
merged_df["ClickRate"] = merged_df.groupby(["Month", "MonthOnBook"])["ClickRate"].apply(
    lambda x: x.fillna(method="ffill").fillna(0.00)
)

# 可选:把ClickRate格式化为两位小数,让结果更整洁
merged_df["ClickRate"] = merged_df["ClickRate"].round(2)

4. 最终结果示例

运行完代码后,merged_df就是你想要的数据集。比如2017-05 23分组的部分结果如下:

2017-05 23 1 0.00
2017-05 23 2 0.00
2017-05 23 3 0.00
2017-05 23 4 14.98
...
2017-05 23 17 14.98
2017-05 23 18 19.25
...
2017-05 23 21 19.25
2017-05 23 22 19.79

关键点说明

  • 分组操作确保我们只在同一个Month和MonthOnBook的范围内处理,不会跨组混淆数据
  • 填充顺序很重要:先**向后填充(ffill)**处理后期缺失值,再用fillna(0.00)补前期的缺失值,这样就不会把后期的缺失值也填成0
  • 如果你用的是其他工具(比如SQL),思路类似:先生成每个分组的连续序列,再左连接原始数据,最后用窗口函数填充缺失值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:32:35