从 1 分钟到 15 分钟间隔重新采样 OHLC 数据时出现问题

Problem when resampling OHLC data from 1 min to 15min interval

我有一个数据集包含每 1 分钟的开盘价、最高价、最低价、收盘价,时间间隔为一年,如下所示:

                           Open     High        Low          Close
Date_time               
2020-01-01 17:00:00     1.12120     1.12121     1.12117     1.12120
2020-01-01 17:01:00     1.12106     1.12135     1.12106     1.12135
2020-01-01 17:02:00     1.12136     1.12139     1.12136     1.12139
2020-01-01 17:03:00     1.12135     1.12135     1.12120     1.12122
2020-01-01 17:04:00     1.12122     1.12125     1.12122     1.12125

此数据集中没有 NaN 或 Null,我检查了它:

df.isnull().sum()

输出:

Open     0
High     0
Low      0
Close    0
dtype: int64

我想将这些重新采样为 15 分钟的间隔,方法是:

dff = df.resample('15min').agg({
    'Open': 'first',
    'High': 'max',
    'Low': 'min',
    'Close': 'last'})

输出将是:

                           Open     High        Low        Close
Date_time               
2020-01-01 17:00:00     1.12120     1.12139     1.12106     1.12127
2020-01-01 17:15:00     1.12127     1.12154     1.12127     1.12146
2020-01-01 17:30:00     1.12147     1.12156     1.12138     1.12154
2020-01-01 17:45:00     1.12155     1.12166     1.12143     1.12143
2020-01-01 18:00:00     1.12143     1.12218     1.12142     1.12202

这听起来不错,但是当我 运行 :

dff.isnull().sum()

输出是:

Open     10121
High     10121
Low      10121
Close    10121
dtype: int64

这意味着几乎一半的数据集是空的。 我搜索了很多但没有找到任何有用的东西。还有另一种方法可以将数据集重新采样为 15 分钟的间隔吗?导致数据集中出现空值的问题在哪里?

更多信息dff 的大小是:

dff.count()
output:
Open     24919
High     24919
Low      24919
Close    24919
dtype: int64

更新: 我刚用过

dff = df.groupby(pd.Grouper(freq='15Min')).agg({"Open": "first", 
                                             "Low": "min", 
                                             "High": "max",
                                             "Close": "last"})

但仍有一半数据集为 Null。 我附加了数据集 csv 文件 here

update#2 :感谢@not_speshal,我发现 df 的大小是 (372335,4) 但是df.resample("1min").last()(372275,4) 我认为这意味着我没有某些 1 分钟间隔的数据,我该如何解决这个问题?

您的 csv 文件已经很多天没有数据了(可能是在市场休市时?)。您可以 resample 然后只保留原始数据中存在的行,如下所示:

df = pd.read_csv("EURUSD_2020.csv")
df["datetime"] = pd.to_datetime(df["Date"]+" "+df["time"])
df = df.drop(["Date", "time"], axis=1).set_index("datetime").astype("float")

dff = df.resample("15min").agg({'Open':'first', 'High':'max', 'Low':'min', 'Close': 'last'})
dff = dff[dff.index.isin(df.index)]