Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.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 访问Pandas.Dataframe中的相邻行_Python_Pandas - Fatal编程技术网

Python 访问Pandas.Dataframe中的相邻行

Python 访问Pandas.Dataframe中的相邻行,python,pandas,Python,Pandas,我试图计算一系列数据的局部最大值和最小值:如果当前行值大于或小于后续行和前一行,请将其设置为当前值,否则设置为NaN。除了这个,还有什么更优雅的方法吗 import pandas as pd import numpy as np rng = pd.date_range('1/1/2014', periods=10, freq='5min') s = pd.Series([1, 2, 3, 2, 1, 2, 3, 5, 7, 4], index=rng) df = pd.DataFrame(s,

我试图计算一系列数据的局部最大值和最小值:如果当前行值大于或小于后续行和前一行,请将其设置为当前值,否则设置为NaN。除了这个,还有什么更优雅的方法吗

import pandas as pd
import numpy as np

rng = pd.date_range('1/1/2014', periods=10, freq='5min')
s = pd.Series([1, 2, 3, 2, 1, 2, 3, 5, 7, 4], index=rng)
df = pd.DataFrame(s, columns=['val'])
df.index.name = "dt"
df['minmax'] = np.NaN

for i in range(len(df.index)):
    if i == 0:
        continue
    if i == len(df.index) - 1:
        continue
    if df['val'][i] >= df['val'][i - 1] and df['val'][i] >= df['val'][i + 1]:
        df['minmax'][i] = df['val'][i]
        continue
    if df['val'][i] <= df['val'][i - 1] and df['val'][i] <= df['val'][i + 1]:
        df['minmax'][i] = df['val'][i]
        continue

print(df)

我们可以使用
shift
where
来确定分配值的内容,重要的是,在比较序列时,我们必须使用位比较器
&
|
<代码>移位将返回移位1行(默认)或传递值的序列或数据帧

使用
where
时,我们可以传递一个布尔条件,第二个参数
NaN
告诉它在
False
时分配这个值

In [81]:

df['minmax'] = df['val'].where(((df['val'] < df['val'].shift(1))&(df['val'] < df['val'].shift(-1)) | (df['val'] > df['val'].shift(1))&(df['val'] > df['val'].shift(-1))), NaN)
df
Out[81]:
                     val  minmax
dt                              
2014-01-01 00:00:00    1     NaN
2014-01-01 00:05:00    2     NaN
2014-01-01 00:10:00    3       3
2014-01-01 00:15:00    2     NaN
2014-01-01 00:20:00    1       1
2014-01-01 00:25:00    2     NaN
2014-01-01 00:30:00    3     NaN
2014-01-01 00:35:00    5     NaN
2014-01-01 00:40:00    7       7
2014-01-01 00:45:00    4     NaN
[81]中的

df['minmax']=df['val'].其中((df['val']df['val'].shift(1))和(df['val']>df['val'.shift(-1)),NaN)
df
出[81]:
瓦尔极小值
dt
2014-01-01 00:00:00南
2014-01-01 00:05:00 2楠
2014-01-01 00:10:00    3       3
2014-01-01 00:15:00 2楠
2014-01-01 00:20:00    1       1
2014-01-01 00:25:00 2楠
2014-01-01 00:30:00 3楠
2014-01-01 00:35:00 5楠
2014-01-01 00:40:00    7       7
2014-01-01 00:45:00 4楠
In [81]:

df['minmax'] = df['val'].where(((df['val'] < df['val'].shift(1))&(df['val'] < df['val'].shift(-1)) | (df['val'] > df['val'].shift(1))&(df['val'] > df['val'].shift(-1))), NaN)
df
Out[81]:
                     val  minmax
dt                              
2014-01-01 00:00:00    1     NaN
2014-01-01 00:05:00    2     NaN
2014-01-01 00:10:00    3       3
2014-01-01 00:15:00    2     NaN
2014-01-01 00:20:00    1       1
2014-01-01 00:25:00    2     NaN
2014-01-01 00:30:00    3     NaN
2014-01-01 00:35:00    5     NaN
2014-01-01 00:40:00    7       7
2014-01-01 00:45:00    4     NaN