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