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

时间:2019-10-18 04:16:03

标签: python dataframe datetime

我正在处理每天有多个日线的时间序列数据。我希望能够根据仅按天分组的数据做出决策,而不能根据.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行的任何日期。

1 个答案:

答案 0 :(得分:2)

我认为您应该能够做到这一点而无需在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

无法做到这一点