如何基于日期时间索引按月份筛选并操作时序数据?
当然可以用if语句实现这个需求!
首先得先确认你的DataFrame索引是正确的datetime类型,因为你的日期格式是dd/mm/yyyy,如果直接用字符串索引的话,月份判断会出问题。先做这一步转换:
import pandas as pd # 把字符串索引转成datetime类型,指定格式避免解析错误 df.index = pd.to_datetime(df.index, format='%d/%m/%Y')
接下来分两种方式实现,都用到了if逻辑:
方式1:显式循环+if语句(适合小数据集)
如果你想直接用if语句写逻辑,可以遍历每一行的索引,判断月份是否为10(十月),然后给对应行添加标记:
# 先新增一列用来存放标记,初始为空字符串 df['october_flag'] = '' # 遍历每一行 for idx, _ in df.iterrows(): # 判断当前索引的月份是否是十月 if idx.month == 10: df.loc[idx, 'october_flag'] = 'x'
不过这种循环在数据集很大的时候效率会比较低,更推荐下面的向量化方式。
方式2:向量化操作+隐式if逻辑(推荐)
Pandas最擅长的就是向量化操作,不用写显式循环,用lambda或者np.where就能把if逻辑融入进去,效率高很多:
用lambda+apply
df['october_flag'] = df.index.month.apply(lambda month: 'x' if month == 10 else '')
用numpy.where(更高效)
import numpy as np df['october_flag'] = np.where(df.index.month == 10, 'x', '')
至于你之前用while语句没成功,大概率是因为while循环在遍历时序索引时逻辑没处理好(比如没正确迭代日期、没准确判断月份),而if语句不管是在循环里还是结合向量化操作,都能更清晰地实现你的需求。
内容的提问来源于stack exchange,提问作者spcol
相关产品推荐
相关产品推荐

