【问题标题】:Check if timestamp is in separate DataFrame检查时间戳是否在单独的 DataFrame 中
【发布时间】:2022-01-25 23:57:44
【问题描述】:

我有一个包含大量日期时间戳的 DataFrame - 称为 df:

    Time                Charge  PV      Energy
1   27/06/2021 04:45    NaN     1.5     1.8
2   28/06/2021 04:46    NaN     1.7     1.5
3   21/07/2021 04:47    NaN     2.5     3.1
4   29/07/2021 04:48    NaN     1.9     2.1
5   05/08/2021 04:49    NaN     1.4     1.1

我想添加一列来检查日期是否在单独的数据框中(查看他们的日子是否是假期)。这是包含假期的DataFrame(称为df_hols)

    Date        Holiday
0   2021-05-29  1
1   2021-07-21  1
2   2021-08-22  1
3   2021-08-23  1
4   2021-08-30  1
5   2021-08-30  1
6   2021-09-09  1
7   2021-09-19  1

我目前正在使用:

for date in df_hols['Date']:
    df['Holiday'] = np.where(df['Time'].dt.date == date, True, False)

这可行,但速度很慢。

我试过了

df['Holiday'] = np.where(df['Time'].dt.date.isin(df_hols['Date']), True, False)

但这返回了所有False。

【问题讨论】:

  • 请检查dtypes 在两个数据帧中是否相同。
  • 他们都是datetime.date。准确地说,df['Time'].dt.date 和 df_hols['Date'] 都是 datetime.date

标签: python pandas dataframe date sorting


【解决方案1】:

您可以获得假期的系列,并在从时间列中提取的日期上使用isin 来检查是否包含:

df['Holiday'] = (pd.to_datetime(df['Time']).dt.date.astype(str)
                   .isin(df_hols['Date'])
                 )

输出:

               Time  Charge   PV  Energy  Holiday
1  27/06/2021 04:45     NaN  1.5     1.8    False
2  28/06/2021 04:46     NaN  1.7     1.5    False
3  21/07/2021 04:47     NaN  2.5     3.1     True
4  29/07/2021 04:48     NaN  1.9     2.1    False
5  05/08/2021 04:49     NaN  1.4     1.1    False

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-07
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-12
    相关资源
    最近更新 更多