【问题标题】:pandas filter rows based on missing dates for a columnpandas 根据列的缺失日期过滤行
【发布时间】:2021-04-14 18:16:47
【问题描述】:

我正在尝试过滤 X 列并获取所有缺失的周数据。

例如,一个df(样本日期,在实际的df中我们将拥有整周的数据):

mean_date         column X  
2021-04-01        x_123
2021-04-01        y_324
2021-04-02        x_123
2021-04-03        x_123

我需要找到当前周对应列 X 的所有缺失日期,即

结果_df:

mean_date_missing     column_X
2021-03-28            x_123
2021-03-29            x_123  
2021-03-30            x_123
2021-03-31            x_123
..
2021-03-28            y_324
2021-03-29            y_324  
2021-03-30            y_324
2021-03-31            y_324
2021-04-02            y_324
2021-04-03            y_324

【问题讨论】:

标签: python pandas date


【解决方案1】:

这可能不是最优雅的方式,但我认为这可行:

首先,我会得到该周所有日期的列表,我们称之为weekdays。您可以手动完成,也可以为它编写一个函数(如果你用谷歌搜索,你应该找到解决方案)。所以,你现在有这样的东西:

weekdays = ["2021-04-01", "2021-04-02", "2021-04-03", "2021-04-04", "2021-04-05"]

接下来,我将按 column X 对 DataFrame 进行分组,因为您想分别为该列的每个可能值查找缺失的日期。

grouped = df.groupby(df["column x"])    

然后,对其进行迭代以查找每组缺失的日期:

missing_list = []
for key, item in grouped:
    existing_dates = item["mean_date"].to_list()
    missing_dates = np.setdiff1d(weekdays, existing_dates)
    for date in missing_dates:
        missing_list.append([date, key])

现在,所有必要的信息都存储在missing_list 中。您只需要从中制作一个 DataFrame:

result_df = pd.DataFrame(missing_list, columns=["mean_date_missing", "column x"])

【讨论】:

  • 我该如何输入result_df
猜你喜欢
  • 2020-03-31
  • 2019-04-29
  • 2018-08-28
  • 2018-05-02
  • 2016-10-29
  • 2021-06-28
  • 2016-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多