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

如何避免ValueError:列必须与键匹配?分组求最早入职日期报错

按Adjusted_id分组获取最早入职日期的解决方案

常见报错原因

  • Hire_date列是字符串类型:原数据里的入职日期是1/22/2002这类字符串,pandas默认识别为object类型,直接取最小值会按字符串字典序比较,不仅结果错误,还可能因格式问题触发ValueError。
  • 分组时未指定聚合列:如果直接对整个DataFrame分组并调用min(),系统不知道如何处理Name、ID这类非数值/日期列,会因无法统一聚合规则报错。

具体解决步骤

1. 转换日期列类型

先把字符串格式的Hire_date转为pandas可识别的日期类型,确保日期比较逻辑正确:

import pandas as pd

# 构造示例数据(实际可替换为读取你的数据源)
df = pd.DataFrame({
    'Adjusted_id': [1,1,1,2,2,2],
    'ID': [11,11,101,22,22,202],
    'Name': ['John Doe','John Doe','Doe, John','Sallie Mae','Saliie Mae','Mae, Sallie'],
    'Emp_type': ['Contractor','Contractor','Employee','Contractor','Contractor','Employee'],
    'Hire_date': ['1/22/2002','1/22/2002','3/17/2006','8/12/2017','8/12/2017','5/20/2020']
})

# 将Hire_date转为日期格式
df['Hire_date'] = pd.to_datetime(df['Hire_date'], format='%m/%d/%Y')

2. 分组获取最早入职日期

根据需求选择合适的方法:

  • 仅获取日期值:如果只需要每个Adjusted_id对应的最早入职日期,直接对Hire_date列分组取min:
min_hire_dates = df.groupby('Adjusted_id')['Hire_date'].min().reset_index()

输出结果:

Adjusted_idHire_date
12002-01-22
22017-08-12
  • 获取完整入职记录:如果需要保留最早入职时的ID、Name等信息,用idxmin()找到最小日期的行索引,再提取整行数据:
earliest_records = df.loc[df.groupby('Adjusted_id')['Hire_date'].idxmin()].reset_index(drop=True)

输出结果:

Adjusted_idIDNameEmp_typeHire_date
111John DoeContractor2002-01-22
222Sallie MaeContractor2017-08-12

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:05:55