pandas如何将数据划分为夜间数据和白天数据

Dan*_*röm -2 python stock pandas

我伙计们和女孩们,

我需要帮助将 Pandas 这个数据帧划分为夜间和白天数据。让我们假设晚上是 17:00 之后和 08:30 之前,而白天是在 08:30 和 17:00 之间。

Date   Time     Open     High      Low    Close  Vol
7   2019-09-02  05:00  11919.9  11929.7  11917.7  11918.9  240
8   2019-09-02  06:00  11920.7  11940.4  11917.7  11927.9  240
9   2019-09-02  07:00  11927.4  11966.2  11927.2  11936.4  240
10  2019-09-02  08:00  11936.9  11955.9  11928.1  11951.4  240
11  2019-09-02  09:00  11951.4  11960.2  11939.4  11954.4  240
12  2019-09-02  10:00  11953.9  11995.9  11951.4  11976.9  240
13  2019-09-02  11:00  11976.7  11979.4  11956.2  11965.9  240
14  2019-09-02  12:00  11966.2  11971.4  11956.4  11965.4  240
15  2019-09-02  13:00  11965.7  11969.7  11943.4  11947.7  240
16  2019-09-02  14:00  11947.4  11962.4  11943.9  11960.7  240
17  2019-09-02  15:00  11960.9  11964.2  11901.2  11934.9  240
18  2019-09-02  16:00  11934.9  11939.7  11921.4  11929.7  240
19  2019-09-02  17:00  11929.9  11940.4  11928.4  11938.2  236
20  2019-09-02  18:00  11937.9  11938.2  11934.7  11938.2  176
21  2019-09-02  19:00  11937.9  11948.7  11937.7  11943.2  196
Run Code Online (Sandbox Code Playgroud)

between_time 只显示当前日期的时间,因此单独不会这样做。

jez*_*ael 5

一种想法是将Time列转换为 timedeltas 并通过布尔掩码过滤Series.between

mask = (pd.to_timedelta(df['Time'].astype(str).add(':00'))
          .between(pd.Timedelta('08:30:00'), pd.Timedelta('17:00:00')))
df1 = df[mask]
print (df1)
          Date   Time     Open     High      Low    Close  Vol
11  2019-09-02  09:00  11951.4  11960.2  11939.4  11954.4  240
12  2019-09-02  10:00  11953.9  11995.9  11951.4  11976.9  240
13  2019-09-02  11:00  11976.7  11979.4  11956.2  11965.9  240
14  2019-09-02  12:00  11966.2  11971.4  11956.4  11965.4  240
15  2019-09-02  13:00  11965.7  11969.7  11943.4  11947.7  240
16  2019-09-02  14:00  11947.4  11962.4  11943.9  11960.7  240
17  2019-09-02  15:00  11960.9  11964.2  11901.2  11934.9  240
18  2019-09-02  16:00  11934.9  11939.7  11921.4  11929.7  240
19  2019-09-02  17:00  11929.9  11940.4  11928.4  11938.2  236

df2 = df[~mask]
print (df2)
          Date   Time     Open     High      Low    Close  Vol
7   2019-09-02  05:00  11919.9  11929.7  11917.7  11918.9  240
8   2019-09-02  06:00  11920.7  11940.4  11917.7  11927.9  240
9   2019-09-02  07:00  11927.4  11966.2  11927.2  11936.4  240
10  2019-09-02  08:00  11936.9  11955.9  11928.1  11951.4  240
20  2019-09-02  18:00  11937.9  11938.2  11934.7  11938.2  176
21  2019-09-02  19:00  11937.9  11948.7  11937.7  11943.2  196
Run Code Online (Sandbox Code Playgroud)

编辑:

另一个想法DataFrame.between_time,但有必要DatetimeIndex

df['Datetime'] = pd.to_datetime(df['Date'].astype(str) + ':' + df['Time'].astype(str))
df = df.set_index('Datetime')

day = df.between_time('09:00','17:00')
night = df[~df.index.isin(day.index)]
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这种想法,尤其是因为白天和黑夜都是动态的。 (2认同)