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

如何在Pandas DataFrame中提取指定年份的quantities值?

提取Pandas DataFrame中指定年份的quantities值

嘿,这其实有几种简洁又实用的方法可以实现你的需求,我来给你详细说明:

方法一:利用dt.year做布尔索引

这是最直接的方式,通过Pandas的dt访问器提取时间戳的年份,再用布尔筛选定位目标数据:

import pandas as pd
import numpy as np

# 先还原你的DataFrame
timestamps = np.array([pd.Timestamp('2016-01-01'), pd.Timestamp('2016-01-02'), pd.Timestamp('2017-01-01'), pd.Timestamp('2018-01-01')])
quantities = np.array([1.0, 10.0, 2.0, 3.0])
df = pd.DataFrame(data={'timestamps': timestamps, 'quantities': quantities})

# 定义目标年份
target_year = 2016
# 筛选并提取结果
filtered_quantities = df[df['timestamps'].dt.year == target_year]['quantities'].tolist()

print(filtered_quantities)  # 输出: [1.0, 10.0]

原理:df['timestamps'].dt.year会将每个时间戳的年份提取为整数序列,和target_year比较后得到布尔掩码,用这个掩码过滤DataFrame,最后将quantities列转为列表。

方法二:用时间范围筛选(更灵活)

如果之后需要调整时间范围(比如提取某季度、某半年的数据),可以构造目标年份的起止日期,用between方法筛选:

target_year = 2016
# 构造年份的起始和结束日期
start_date = f"{target_year}-01-01"
end_date = f"{target_year}-12-31"

filtered_quantities = df[df['timestamps'].between(start_date, end_date)]['quantities'].tolist()

这种方法的优势是扩展性强,只要修改起止日期就能适配不同的时间区间需求。

方法三:基于索引的筛选(适合频繁按时间查询的场景)

如果你的DataFrame经常需要按时间查询,可以先将timestamps设为索引,之后的筛选会更高效:

# 将timestamps设为索引
df.set_index('timestamps', inplace=True)

target_year = 2016
filtered_quantities = df.loc[df.index.year == target_year, 'quantities'].tolist()

# 如果需要恢复原索引,执行:df.reset_index(inplace=True)

小补充

如果你需要的是NumPy数组而不是Python列表,只需要把tolist()换成.values或者.to_numpy()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:23:44