我每天使用多條盤中線來處理時間序列數據。我希望能夠根據僅按天分組的數據做出決策,而不是作為.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
提交
取消
