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

如何在无NaN的Pandas索引中查找各日期缺失的指定Name值?

查找Pandas日期索引下缺失的Name值

场景说明

现有一个以Date为索引的DataFrame,包含Name和Payment列(Payment无空值),已知所有可能的Name列表,需要找出每个日期索引下缺失的具体Name值。

示例数据:

import pandas as pd

data = [['2010-01-01', 'Patrick', 20],['2010-01-02', 'James', 20]]
df = pd.DataFrame(data, columns=['Date', 'Name', 'Payment']).set_index('Date')
poss_names = ['James', 'Patrick']

期望输出:[['2010-01-01', 'James'], ['2010-01-02', 'Patrick']]


方法一:分组对比Name集合

通过分组获取每个日期已有的Name,再与总列表对比找出缺失值:

# 按日期索引分组,收集每个日期的Name列表
date_names = df.groupby(level=0)['Name'].apply(list)

# 生成缺失记录列表
missing_records = [
    [date, name]
    for date, existing in date_names.items()
    for name in poss_names
    if name not in existing
]

print(missing_records)

方法二:透视表结合空值判断

利用透视表生成每个日期对应所有Name的结构,缺失的Name会对应空值,以此定位缺失项:

# 生成透视表,缺失Name的位置会显示NaN
pivot_table = df.pivot(columns='Name', values='Payment')

# 遍历每行,找出空值对应的Name
missing_records = []
for date, row in pivot_table.iterrows():
    missing_names = row[row.isna()].index.tolist()
    for name in missing_names:
        missing_records.append([date, name])

print(missing_records)

两种方法都能得到符合预期的结果,可根据数据规模选择:分组对比适合小规模数据,透视表法逻辑更直观,适合需要后续分析缺失情况的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:42:24