在pandas DataFram中查找前3天的最低值

2024-09-29 23:23:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python很陌生。抱歉,如果我的问题是愚蠢的。。在

我试图找到前3天在时间序列中的最低值。在

例如

             price             low
1993-01-29   43.750000         NaN
1993-02-01   43.968700         NaN
1993-02-02   44.125000         43.750000
1993-02-03   42.375000         42.375000
1993-02-04   44.468700         42.375000

我试过.shift(),.min()等,但都没用。 非常感谢您的帮助!在


Tags: shift时间序列nanminpricelow陌生
3条回答

你可以试试这个。在

import pandas as pd
import numpy as np

# your data
# ===========================
np.random.seed(0)
df = pd.DataFrame(100+np.random.randn(100).cumsum(), index=pd.date_range('2015-01-01', periods=100, freq='B'), columns=['price'])
df


               price
2015-01-01  101.7641
2015-01-02  102.1642
2015-01-05  103.1429
2015-01-06  105.3838
2015-01-07  107.2514
2015-01-08  106.2741
2015-01-09  107.2242
2015-01-12  107.0729
2015-01-13  106.9696
2015-01-14  107.3802
...              ...
2015-05-07  100.1852
2015-05-08  101.4077
2015-05-11  101.6160
2015-05-12  102.5926
2015-05-13  102.9490
2015-05-14  103.6555
2015-05-15  103.6660
2015-05-18  105.4519
2015-05-19  105.5788
2015-05-20  105.9808

[100 rows x 1 columns]


# processing
# ===========================
pd.concat([df, df.shift(1), df.shift(2)], axis=1).dropna().max(axis=1)

2015-01-05    103.1429
2015-01-06    105.3838
2015-01-07    107.2514
2015-01-08    107.2514
2015-01-09    107.2514
2015-01-12    107.2242
2015-01-13    107.2242
2015-01-14    107.3802
2015-01-15    107.5243
2015-01-16    108.9785
                ...   
2015-05-07    100.5884
2015-05-08    101.4077
2015-05-11    101.6160
2015-05-12    102.5926
2015-05-13    102.9490
2015-05-14    103.6555
2015-05-15    103.6660
2015-05-18    105.4519
2015-05-19    105.5788
2015-05-20    105.9808
Freq: B, dtype: float64

您可以尝试这样做(当然,您可以用您需要的任何值填充last_x_dates列表):

import datetime

indexes = [datetime.datetime(2015,1,1), datetime.datetime(2015,1,2), datetime.datetime(2015,1,3), datetime.datetime(2015,1,4)]

df = pd.DataFrame(data={'price' : [12,4,124,555]},index=indexes)

>>               price
>>  2015-01-01     12
>>  2015-01-02      4
>>  2015-01-03    124
>>  2015-01-04    555

last_x_dates = [datetime.datetime(2015,1,3), datetime.datetime(2015,1,4)]

df = df[df.index.isin(last_x_dates)]
print min(df['price'])

>> 124

无需手动执行此操作,它已经有一个功能:

pd.rolling_min( df['price'], 3 )

1993-01-29       NaN
1993-02-01       NaN
1993-02-02    43.750
1993-02-03    42.375
1993-02-04    42.375

一般来说,有许多滚动样式的函数用于处理常见情况,而rolling_apply用于用户函数。许多库/包都有这类函数,您通常可以通过搜索“移动”或“滚动”来找到这些函数。在

Documentaion for pandas moving/rolling functions

相关问题 更多 >

    热门问题