为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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


查看完整回答
反对 回复 2022-06-28
  • 1 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号