代码之家  ›  专栏  ›  技术社区  ›  krmbla

我想使用.weekday()创建一个新的分组数据帧,其中只有带假期的日期

  •  2
  • krmbla  · 技术社区  · 2 年前

    所以我有一个数据帧:

    dateRep day month   year    cases   deaths  country_name    Land.area..sq..km.
    0   2021-09-21  21  9   2021    1162    7   Austria 82520.0
    1   2021-09-20  20  9   2021    1708    7   Austria 82520.0
    2   2021-09-19  19  9   2021    2072    5   Austria 82520.0
    3   2021-09-18  18  9   2021    2235    9   Austria 82520.0
    4   2021-09-17  17  9   2021    2283    8   Austria 82520.0
    ... ... ... ... ... ... ... ... ...
    6145    2021-03-05  5   3   2021    4069    15  Sweden  407310.0
    6146    2021-03-04  4   3   2021    4882    19  Sweden  407310.0
    6147    2021-03-03  3   3   2021    4873    18  Sweden  407310.0
    6148    2021-03-02  2   3   2021    6191    23  Sweden  407310.0
    6149    2021-03-01  1   3   2021    668975  13086   Sweden  407310.0
    6150 rows × 8 columns
    

    我的目标是制作一个新的数据帧,它只有在“dateRep”列中符合特定条件的行

    条件是使用.weekday()函数的假日(周日或周六)

    但问题是当我尝试

    df.loc[(df['dateRep'].weekday() == 5) or (df['dateRep'].weekday == 6)]
    

    我犯了一个错误 AttributeError: 'Series' object has no attribute 'weekday'

    我该怎么办?我该如何整理这些行,有什么更简单的方法?

    3 回复  |  直到 2 年前
        1
  •  3
  •   Andrej Kesely    2 年前

    转换 dateRep 日期时间系列和使用 .dt. 访问者:

    df["dateRep"] = pd.to_datetime(df["dateRep"])
    print(df.loc[(df["dateRep"].dt.weekday == 5) | (df["dateRep"].dt.weekday == 6)])
    

    打印:

         dateRep  day  month  year  cases  deaths country_name  Land.area..sq..km.
    2 2021-09-19   19      9  2021   2072       5      Austria             82520.0
    3 2021-09-18   18      9  2021   2235       9      Austria             82520.0
    

    OR:使用 .isin() 对于较短的代码:

    df.loc[df["dateRep"].dt.weekday.isin([5, 6])]
    
        2
  •  2
  •   Stickleback    2 年前

    请尝试:

    df.loc[(df['dateRep'].dt.weekday == 5)|(df['dateRep'].dt.weekday == 6)]
    

    https://pandas.pydata.org/docs/reference/api/pandas.Series.dt.weekday.html#pandas.Series.dt.weekday

        3
  •  0
  •   Ashutosh Dwivedi    2 年前

    您是否已将数据帧转换为日期时间类型。如果不这样做 df[dateRep']=pd.to_datetime(df[dateRep'])