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

基于搜索值索引返回列值:Pandas数据框日期匹配问题

Pandas 按部分字符串匹配关联编号与日期的最优解法

直接用Pandas的矢量化字符串操作就能高效解决,不用单独提取索引再匹配,一步到位:

1. 构造示例DataFrame

import pandas as pd

data = {
    0: [0, 1, 2, 3],
    1: ["8/2/22", "8/3/22", "8/4/22", "8/5/22"],
    2: ["Jim's number -223-", "Al's number -354L-", "Eric's number -35034-", "John's number -35478-"],
    3: ["Evan's number -4566-", "Tess's number -45366-", "Daniel's number -LP4566-", "Jacob's number -XF4T67-"]
}
df = pd.DataFrame(data)

2. 核心实现:直接筛选匹配行并提取日期

用str.contains()对目标列做部分字符串匹配,合并列的匹配结果后,直接提取对应行的日期列(第1列):

# 要搜索的目标字符串
target_str = "-223-"

# 第2、3列中任意一列包含目标字符串的布尔条件
match_condition = df[2].str.contains(target_str) | df[3].str.contains(target_str)

# 提取匹配行的日期
matched_dates = df.loc[match_condition, 1]
print(matched_dates)
# 输出:0    8/2/22
#      Name: 1, dtype: object

如果需要同时获取匹配的编号和日期,可以进一步提取编号:

# 提取第2列中匹配的编号+日期
df.loc[df[2].str.contains(target_str), [1, 2]]
# 提取第3列中匹配的编号+日期
df.loc[df[3].str.contains(target_str), [1, 3]]

3. 若需单独获取匹配行索引

如果一定要拿到匹配行的索引,直接从布尔条件转换即可:

matched_indices = df[match_condition].index
# 用索引取日期
matched_dates = df.loc[matched_indices, 1]

最优解优势

  • 用Pandas内置矢量化操作,比手动循环遍历效率高几个数量级,适配大数据量场景;
  • 代码简洁,直接关联条件与结果,无需中间索引变量,降低出错概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:05:19