python - pandas:选择所选行的相邻行
问题描述
我有一个数据框包含几年的电力负荷数据。我想选择每年具有最大值的行以及那天前后 +/- 5 天。
年度最高:
Max
2000-12-14 2009.347900
2001-02-22 1987.976074
期望的结果:
Max
2000-12-09 1949.279175
2000-12-10 1901.194702
2000-12-11 1827.509155
2000-12-12 1579.835205
2000-12-13 1780.223267
2000-12-14 2009.347900
2000-12-15 1845.129395
2000-12-16 1795.377319
2000-12-17 1741.817749
2000-12-18 1747.508789
2000-12-19 1800.817261
2001-02-17 1703.080322
2001-02-18 1792.888062
2001-02-19 1777.731323
2001-02-20 1700.863281
2001-02-21 1624.189209
2001-02-22 1987.976074
2001-02-23 1898.503052
2001-02-24 1809.863403
2001-02-25 1660.542725
2001-02-26 1792.182007
2001-02-27 1770.865356
我df.loc[df.groupby("Year")['Max'].idxmax()].Max
用来获取年份的最大值,但如何选择所有相邻行?
解决方案
import pandas as pd
import numpy as np
df = pd.DataFrame(index = pd.date_range('01-01-2001','01-01-2002',freq='D'),
data = {'power':100*np.random.random(366)})
df.loc[df.power.idxmax() - np.timedelta64(5,'D'):df.power.idxmax() + np.timedelta64(5,'D')]
该loc
方法可以将范围作为参数。Numpy timedelta 用于为索引添加和减去天数。
编辑:如果您想在最大行的任一侧看到 5 行,无论时间增量如何,请重置数据帧的索引。索引现在将是整数,您可以通过这种方式在最大值的任一侧获得 5 行:
#reset index to list of integers
df = df.reset_index()
# index using integers
df.loc[df.power.idxmax() -5: df.power.idxmax()+5]
推荐阅读
- c# - 如何在 C# 中使用 tiny-yolo 和 OpenCvSharp Wrapper?
- python - 从熊猫数据框创建自定义热图
- spring-cloud-dataflow - java.lang.IllegalStateException when binding mysql service to skipper server in PCF
- r - 如何编写与英特尔 MKL 链接的 CRAN 可发布包?
- node.js - 尽可能快地在 MongoDB 中加载一百万条记录
- angular - 避免工作区中 Angular 项目的相对路径
- python - 在函数中调用函数时如何修复python中的AttributeError?
- python - 如何将我的数组保存到 Python 中的 matlab 结构中?
- r - 两个数据集之间的重叠
- function - 在IE中找不到切换LI元素的解决方案,其他浏览器都可以