按行计算数据框,但按日期时间分组

我每天使用多条盘中线来处理时间序列数据。我希望能够根据仅按天分组的数据做出决策,而不是作为.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   EB

2018-09-13 9:20:00  69.45

2018-09-13 9:30:00  69.44

2018-09-13 9:40:00  69.33

2018-09-13 9:50:00  69.34

2018-09-13 10:00:00 69.36

2018-09-14 9:20:00  69.45

2018-09-14 9:30:00  69.44

2018-09-14 9:40:00  69.33

2018-09-14 9:50:00  69.34

2018-09-14 10:00:00 69.36

该代码正在遍历每个日期时间并删除任何没有 5 行的日期。


哔哔one
浏览 202回答 1
1回答

茅侃侃

我认为您应该能够在不循环 Python 的情况下做到这一点,并通过矢量化命令来利用 C 级速度。制作一系列日期,进行值计数,使用值计数标记要保留的数据,并过滤掉不需要的数据。# Make a series to use as a mapping for dates which should be keptdates_with_more_than_5 = df["Date_Time"].dt.date.value_counts() > 4# Make a column in the DataFrame which indicates which data to keepdf["keeper_data"] = df["Date_Time"].dt.date.map(dates_with_more_than_5).fillna(False)# Filter the data and drop the keeper "flag" columndf = df[df["keeper_data"].drop(columns="keeper_data"]你可以用更少的行来做到这一点,但这很容易阅读。编辑:另外,我不明白为什么这不能用groupby
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python