我每天使用多条盘中线来处理时间序列数据。我希望能够根据仅按天分组的数据做出决策,而不是作为.groupby()目前我正在做一个循环,比如np.unique(df.index.date)每天应用计算,但这在大型数据集上非常耗时。for day in np.unique(df.index.date): if df[day.strftime("%Y-%m-%d")].count()[0] != 5: df.drop(df[df.index.date == day].index, inplace=True)一段数据可能如下所示:Date_Time EB2018-09-13 9:20:00 69.452018-09-13 9:30:00 69.442018-09-13 9:40:00 69.332018-09-13 9:50:00 69.342018-09-13 10:00:00 69.362018-09-14 9:20:00 69.452018-09-14 9:30:00 69.442018-09-14 9:40:00 69.332018-09-14 9:50:00 69.342018-09-14 10:00:00 69.36该代码正在遍历每个日期时间并删除任何没有 5 行的日期。
1 回答
茅侃侃
TA贡献1842条经验 获得超22个赞
我认为您应该能够在不循环 Python 的情况下做到这一点,并通过矢量化命令来利用 C 级速度。制作一系列日期,进行值计数,使用值计数标记要保留的数据,并过滤掉不需要的数据。
# Make a series to use as a mapping for dates which should be kept
dates_with_more_than_5 = df["Date_Time"].dt.date.value_counts() > 4
# Make a column in the DataFrame which indicates which data to keep
df["keeper_data"] = df["Date_Time"].dt.date.map(dates_with_more_than_5).fillna(False)
# Filter the data and drop the keeper "flag" column
df = df[df["keeper_data"].drop(columns="keeper_data"]
你可以用更少的行来做到这一点,但这很容易阅读。
编辑:另外,我不明白为什么这不能用groupby
添加回答
举报
0/150
提交
取消
