Python 熊猫:选择选定行的相邻行
我有一个数据框包含了几年的电力负荷数据。我想选择每年具有最大值的行以及该天前后的+/-5天 年度最大值:Python 熊猫:选择选定行的相邻行,python,pandas,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
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用于为索引添加和减去天数
编辑:如果希望在max行的任一侧看到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]
我试着说它给了我一个“TypeError:Compatible type for a datetime/timedelta operation[sub]”错误我的错误,我编辑了我的答案以包含一个最小的可复制示例它解决了部分问题它给了我最大值附近的行,但由于我有多年的时间需要首先分组。它不起作用。我使用的是df.loc[df.groupby(“Year”)['Max'].idxmax()-np.timedelta64(5,'D'):df.groupby(“Year”)['Max'].idxmax()+np.timedelta64(5,'D'),['Max']]如果您在多个年份中更改时间框架,例如2001~2003年,则只会选择Max+/-5行。我想为每年选择最大+/-5。有什么想法吗?非常感谢。