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

如何筛选每周最后几项?如何过滤JSON中周末的ISO 8601时间数据?

嘿,这两个问题都是处理时间相关数据时很常见的需求,我给你分不同工具的具体实现方案,你可以根据自己的场景选择:

问题1:如何筛选每周的最后几项数据?

用Python Pandas处理

如果你的数据是表格形式,Pandas是最方便的工具。核心思路是按周分组,然后提取每组的最后N条数据:

import pandas as pd

# 示例数据
data = {
    'date': ['2024-01-01', '2024-01-05', '2024-01-06', '2024-01-07', '2024-01-12'],
    'value': [10, 20, 30, 40, 50]
}
df = pd.DataFrame(data)

# 先把日期列转为datetime格式
df['date'] = pd.to_datetime(df['date'])

# 按ISO标准周分组,取每组最后2条(可替换成你需要的数量)
weekly_last_items = df.groupby(df['date'].dt.isocalendar().week).tail(2)
print(weekly_last_items)

如果需要按自然周(比如周日或周一作为一周的起始)调整分组方式,可以用dt.to_period():

# 按周日结束的周分组,取最后2条
weekly_last_items = df.groupby(df['date'].dt.to_period('W-SUN')).tail(2)

用SQL处理

如果数据存在数据库里,用窗口函数就能轻松实现:

WITH ranked_data AS (
    SELECT 
        *,
        -- 按周分区,按日期倒序排名
        ROW_NUMBER() OVER (PARTITION BY EXTRACT(WEEK FROM date_column) ORDER BY date_column DESC) AS rn
    FROM your_table
)
-- 取每组排名前2的(即每周最后2条)
SELECT *
FROM ranked_data
WHERE rn <= 2;

注意:不同数据库的周提取函数略有差异,比如MySQL用WEEK(date_column),SQL Server用DATEPART(WEEK, date_column),需要根据你的数据库调整。

问题2:过滤掉ISO 8601格式日期时间的周末条目

用Python处理JSON

先解析ISO 8601日期,然后判断是否为工作日,再过滤:

import json
from datetime import datetime

# 示例JSON数据
json_data = '''
[
    {"id": 1, "datetime": "2024-01-06T12:00:00Z"},
    {"id": 2, "datetime": "2024-01-07T13:00:00Z"},
    {"id": 3, "datetime": "2024-01-08T14:00:00Z"},
    {"id": 4, "datetime": "2024-01-09T15:00:00Z"}
]
'''

# 加载数据
data = json.loads(json_data)

# 过滤周末:weekday()返回0=周一,4=周五,5=周六,6=周日
filtered_data = [
    item for item in data 
    if datetime.fromisoformat(item['datetime'].replace('Z', '+00:00')).weekday() < 5
]

# 输出过滤后的结果
print(json.dumps(filtered_data, indent=2))

注:replace('Z', '+00:00')是因为Python的fromisoformat默认不支持带Z的ISO格式,转换后就能正常解析了。

用jq命令行处理

如果习惯用命令行处理JSON文件,jq是绝佳选择:

# 假设你的JSON文件名为data.json
jq '[.[] | select(.datetime | strptime("%Y-%m-%dT%H:%M:%SZ") | .weekday | . != 0 and . != 6)]' data.json

解释:jq的strptime解析ISO格式后,.weekday返回0=周日,6=周六,所以我们过滤掉这两个值,保留工作日的条目。


内容的提问来源于stack exchange,提问作者Dr. Moe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:50:21