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

如何基于指定日期的第一个DataFrame名单过滤第二个DataFrame无效记录

实现思路

首先将动态列的出勤宽表转换为「日期-出勤人」的长表结构,再通过双字段匹配过滤活动表的无效记录,完美适配出勤表列数动态变化的场景。

代码实现

首先导入依赖:

import pandas as pd

第一步:处理出勤宽表,转换为长表

# df_attend 为第一个存储出勤信息的宽表
df_attend_long = df_attend.melt(
    id_vars="date",  # 固定日期列,剩余所有人员列自动参与转换
    value_name="name"  # 转换后的人员姓名字段
).drop(columns=["variable"])  # 删掉原宽表的列序号字段(1、2、3...50这些)

# 可选:去重避免同一日期下重复的人员记录干扰匹配
df_attend_long = df_attend_long.drop_duplicates(subset=["date", "name"])

第二步:匹配过滤活动表

# df_activity 为第二个存储活动信息的表
# 用内连接只保留「日期+姓名」同时出现在出勤长表中的记录,自动删除无效条目
df_activity_filtered = pd.merge(
    df_activity,
    df_attend_long,
    on=["date", "name"],
    how="inner"
)
注意事项
  • 需保证两个表的date列格式完全一致,比如都为字符串格式或都为datetime格式,避免格式差异导致匹配失败
  • 需保证两个表的姓名字段拼写、大小写完全一致,比如示例中出勤表的jhohn和活动表的john拼写不同会导致匹配失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:36:06