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

如何获取DataFrame中各Object分组对应的缺失Period值

Python Pandas 实现方案

首先导入依赖并构造测试数据:

import pandas as pd

# 构造示例DataFrame,实际使用时替换为你的数据读取逻辑
data = {
    'Object': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
    'Period': [202101, 202102, 202103, 202105, 202107, 202102, 202103, 202104, 202106]
}
df = pd.DataFrame(data)

通用实现(支持跨年场景,推荐使用)

通过转成Pandas月度周期类型处理,避免跨年时月份序列不连续的问题:

# 将Period转为月度周期类型
df['Period'] = pd.to_datetime(df['Period'].astype(str), format='%Y%m').dt.to_period('M')

# 定义计算缺失月份的自定义函数
def calc_missing_periods(group_series):
    # 生成分组内最小到最大日期的完整月度序列
    full_periods = pd.period_range(start=group_series.min(), end=group_series.max(), freq='M')
    # 求差集得到缺失的月份,转为YYYYMM格式后拼接
    missing_list = full_periods[~full_periods.isin(group_series)].strftime('%Y%m').tolist()
    return ' / '.join(missing_list)

# 按Object分组聚合得到结果
result_df = df.groupby('Object')['Period'].apply(calc_missing_periods).reset_index(name='MissingValues')

简易实现(仅适用于同一年的月份场景)

如果确认所有Period都属于同一年,直接用整数范围处理即可:

def calc_missing_periods_simple(group_series):
    min_p = group_series.min()
    max_p = group_series.max()
    missing = [str(p) for p in range(min_p, max_p + 1) if p not in group_series.values]
    return ' / '.join(missing)

result_df = df.groupby('Object')['Period'].apply(calc_missing_periods_simple).reset_index(name='MissingValues')

运行后输出的result_df就是你需要的目标格式,打印结果如下:

Object  MissingValues
0      A  202104 / 202106
1      B          202105

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:51:03