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

如何基于日期向量排名为Pandas DataFrame新增列并删除同日期行

解决方案

步骤说明

  1. 确保日期列类型正确:先将Date列转换为datetime类型(如果尚未转换)。
  2. 过滤目标日期行:删除日期部分(年月日)与向量L中任意日期重合的行。
  3. 计算排名列new:基于L划分的区间判断每行Date对应的排名,规则为:
    • 早于2018-07-15 → 0
    • 介于2018-07-15和2019-07-15之间 → 1
    • 晚于2019-07-15 → 2

代码实现

import pandas as pd
import numpy as np

# 初始化数据(模拟用户输入)
L = [pd.Timestamp('2018-07-15 00:00:00'), pd.Timestamp('2019-07-15 00:00:00')]
data = {
    'c1': [1, 1, 3, 4, 2, 5, 8, 5, 2, 2],
    'c2': [2, 7, 7, 7, 2, 1, 4, 4, 9, 6],
    'Date': ['2018-07-13 16:00:00', '2018-07-15 16:00:00', '2018-07-15 16:50:00',
             '2018-07-15 19:50:00', '2018-07-16 16:00:00', '2020-10-10 16:00:00',
             '2018-06-13 16:00:00', '2021-12-13 16:00:00', '2019-01-01 16:00:00',
             '2019-01-01 17:00:00']
}
df = pd.DataFrame(data)

# 步骤1:转换Date列为datetime类型
df['Date'] = pd.to_datetime(df['Date'])

# 步骤2:过滤掉日期部分与L中任意日期重合的行
L_dates = {t.date() for t in L}
df_filtered = df[~df['Date'].dt.date.isin(L_dates)]

# 步骤3:计算new列(使用np.searchsorted高效定位区间)
# 若原始L未排序,先执行L_sorted = sorted(L)
L_sorted = L
df_filtered['new'] = np.searchsorted(L_sorted, df_filtered['Date'])

# 查看结果
print(df_filtered)

代码解释

  • 日期过滤:通过dt.date提取Date的年月日部分,结合isin和取反操作~快速过滤掉与L中日期重合的行。
  • 排名计算:np.searchsorted返回每个Date在有序列表L_sorted中的插入位置,正好对应区间排名:
    • 插入位置0 → 日期早于L的第一个元素
    • 插入位置1 → 日期介于L的两个元素之间
    • 插入位置2 → 日期晚于L的第二个元素

该方法利用pandas和numpy的内置向量运算,避免循环,效率最优,适合处理大规模数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:54:13