如何从数据集中筛选出最近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
相关产品推荐
相关产品推荐

