xxe*_*nxx 5 python pandas data-science
我有一个简单的问题,我似乎找不到严格的答案。
假设我有一个包含日期、开盘价、最高价、最低价、收盘价和成交量的数据框。
我要做的是首先找到我可以使用的当前日期:
today = pd.datetime.today().date()
Run Code Online (Sandbox Code Playgroud)
我的问题是从当前日期选择过去 20 天的数据。
我需要选择最后 20 行,因为我需要在此数据集的近列中找到最高和最低值。
任何指针都会有很大帮助。我在谷歌上搜索了一段时间,并不断找到不同的答案。
谢谢!
设置
today = pd.datetime.today().date()
df = pd.DataFrame(
np.random.rand(20, 4),
pd.date_range(end=today, periods=20, freq='3D'),
columns=['O', 'H', 'L', 'C'])
df
O H L C
2017-08-01 0.821996 0.894122 0.829814 0.429701
2017-08-04 0.883512 0.668642 0.524440 0.914845
2017-08-07 0.035753 0.231787 0.421547 0.163865
2017-08-10 0.742781 0.293591 0.874033 0.054421
2017-08-13 0.252422 0.632991 0.547044 0.650622
2017-08-16 0.316752 0.190016 0.504701 0.827450
2017-08-19 0.777069 0.533121 0.329742 0.603473
2017-08-22 0.843260 0.546845 0.600270 0.060620
2017-08-25 0.834180 0.395653 0.189499 0.820043
2017-08-28 0.806369 0.850968 0.753335 0.902687
2017-08-31 0.336096 0.145325 0.876519 0.114923
2017-09-03 0.590195 0.946520 0.009151 0.832992
2017-09-06 0.901101 0.616852 0.375829 0.332625
2017-09-09 0.537892 0.852527 0.082807 0.966297
2017-09-12 0.104929 0.803415 0.345942 0.245934
2017-09-15 0.085703 0.743497 0.256762 0.530267
2017-09-18 0.823960 0.397983 0.173706 0.091678
2017-09-21 0.211412 0.980942 0.833802 0.763510
2017-09-24 0.312950 0.850760 0.913519 0.846466
2017-09-27 0.921168 0.568595 0.460656 0.016313
Run Code Online (Sandbox Code Playgroud)
解决方案
使用 pandas 日期时间索引切片。非常简单明了,也是 pandas 开发人员解决这个问题的目的。
注意: 这并不关心过去 20 天内有多少行,它只是获取所有行。我认为这就是OP想要的。
df[today - pd.offsets.Day(20):]
O H L C
2017-09-09 0.537892 0.852527 0.082807 0.966297
2017-09-12 0.104929 0.803415 0.345942 0.245934
2017-09-15 0.085703 0.743497 0.256762 0.530267
2017-09-18 0.823960 0.397983 0.173706 0.091678
2017-09-21 0.211412 0.980942 0.833802 0.763510
2017-09-24 0.312950 0.850760 0.913519 0.846466
2017-09-27 0.921168 0.568595 0.460656 0.016313
Run Code Online (Sandbox Code Playgroud)
下面的代码就是一个例子。
import pandas as pd
import numpy as np
today = pd.datetime.today().date()
df = pd.DataFrame({"date": pd.date_range('20170901','20170930', freq='D'),
"open": np.random.rand(30),
"high": np.random.rand(30),
"low": np.random.rand(30),
"close": np.random.rand(30),
"volume": np.random.rand(30)},
columns = ["date", "open", "high", "low", "close", "volume"])
selected_date = pd.date_range(today - pd.to_timedelta(20, unit='d'), today, freq='D')
df_selected = df[df["date"].isin(selected_date)]
# Out[40]:
# date open high low close volume
# 7 2017-09-08 0.790424 0.999621 0.139619 0.669588 0.476784
# 8 2017-09-09 0.190239 0.439975 0.362905 0.018472 0.905773
# 9 2017-09-10 0.184327 0.686411 0.124636 0.741130 0.132774
# 10 2017-09-11 0.346019 0.022173 0.422704 0.159098 0.011801
# 11 2017-09-12 0.549928 0.228514 0.851650 0.824209 0.756816
# 12 2017-09-13 0.413550 0.994019 0.340958 0.905432 0.289316
# 13 2017-09-14 0.435034 0.485978 0.768520 0.534148 0.276084
# 14 2017-09-15 0.839840 0.775490 0.481123 0.911378 0.928908
# 15 2017-09-16 0.442393 0.512893 0.519516 0.844619 0.813230
# 16 2017-09-17 0.723789 0.646345 0.081776 0.388496 0.391421
# 17 2017-09-18 0.964289 0.849776 0.156879 0.663885 0.062165
# 18 2017-09-19 0.001000 0.174666 0.694151 0.777330 0.739554
# 19 2017-09-20 0.426997 0.541273 0.789910 0.218263 0.748694
# 20 2017-09-21 0.217904 0.295377 0.087909 0.765242 0.555663
# 21 2017-09-22 0.910734 0.848182 0.476946 0.374580 0.079900
# 22 2017-09-23 0.160963 0.795219 0.956262 0.744048 0.645552
# 23 2017-09-24 0.412634 0.722252 0.226693 0.524794 0.910259
# 24 2017-09-25 0.535072 0.131761 0.931164 0.618055 0.542512
# 25 2017-09-26 0.697222 0.552784 0.537899 0.773403 0.916538
# 26 2017-09-27 0.257628 0.479550 0.539444 0.540076 0.344933
# 27 2017-09-28 0.270114 0.914036 0.137004 0.939907 0.736016
Run Code Online (Sandbox Code Playgroud)
此外,如下获得关闭项的最大值和最小值。
df_max = df_selected[df_selected['close'] == df_selected['close'].max()]
# Out[48]:
# date open high low close volume
# 27 2017-09-28 0.270114 0.914036 0.137004 0.939907 0.736016
df_min = df_selected[df_selected['close'] == df_selected['close'].min()]
# Out[49]:
# date open high low close volume
# 8 2017-09-09 0.190239 0.439975 0.362905 0.018472 0.905773
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4231 次 |
| 最近记录: |