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

如何从数据集中筛选出最近20个周二的记录?

嘿,这个需求我熟!下面给你几种不同工具的实现方案,你可以根据自己的技术栈选最合适的:

Python 实现(用Pandas处理)

如果你的数据集是文本文件或者能导入成DataFrame,用Pandas处理最省心:

import pandas as pd

# 读取数据集(假设文件名为data.txt,每行是"日期时间 值"的格式)
df = pd.read_csv('data.txt', sep=' ', header=None, names=['datetime', 'value'])

# 将字符串列转换为datetime类型,方便后续筛选
df['datetime'] = pd.to_datetime(df['datetime'])

# 筛选周二:注意Pandas的dt.weekday中,0=周一,1=周二,以此类推
tuesday_records = df[df['datetime'].dt.weekday == 1]

# 按日期倒序排序,取最近的20条记录
latest_20_tuesdays = tuesday_records.sort_values('datetime', ascending=False).head(20)

# 输出结果,保持原格式
print(latest_20_tuesdays.to_csv(sep=' ', header=False, index=False))

小提示:如果习惯用ISO标准的星期索引(1=周一,2=周二),可以改用dt.isoweekday() == 2来筛选。

SQL 实现

如果数据存在数据库里,直接用SQL查询更高效,不同数据库的星期函数略有差异:

MySQL/MariaDB

SELECT record_datetime, record_value
FROM your_table_name
-- WEEKDAY()返回0=周一,1=周二
WHERE WEEKDAY(record_datetime) = 1
ORDER BY record_datetime DESC
LIMIT 20;

PostgreSQL

SELECT record_datetime, record_value
FROM your_table_name
-- EXTRACT(DOW ...)返回0=周日,1=周一,2=周二
WHERE EXTRACT(DOW FROM record_datetime) = 2
ORDER BY record_datetime DESC
LIMIT 20;
Shell 脚本实现(处理本地文本文件)

如果不想写代码,用Shell命令组合也能搞定:

# 针对Linux系统的date命令
awk '{
    date_part = $1 " " $2
    # 调用date命令获取星期几(%u返回1=周一到7=周日)
    cmd = "date -d \"" date_part "\" +%u"
    cmd | getline weekday
    close(cmd)
    # 筛选周二(%u返回2)
    if (weekday == 2) print $0
}' data.txt | sort -k1,2r | head -20

小提示:如果是macOS系统,date命令参数不同,需要把awk里的cmd改成:
cmd = "date -j -f \"%Y-%m-%d %H:%M:%S\" \"" date_part "\" +%u"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:57:36