Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:选择选定行的相邻行_Python_Pandas - Fatal编程技术网

Python 熊猫:选择选定行的相邻行

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

我有一个数据框包含了几年的电力负荷数据。我想选择每年具有最大值的以及该天前后的+/-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用于为索引添加和减去天数

编辑:如果希望在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。有什么想法吗?非常感谢。