按月分组,但仅获取 Pandas 列中真实值的总计

Group by Month but only grab totals for true values in column with Pandas

我认为这个很简单,但我不知道如何获取我想要的数据。

我在名为 ClosedDate 和 Is_Article_Linked 的数据框中有两个字段。我想按 ClosedDate 的月份对其进行分组,然后仅在 Is_Article_Linked 为真但仍保留总记录时才进行统计。

例如我的代码如下所示

data = [
  [ ('ClosedDate', '2021-01-18T12:46:38.000+0000'), ('Is_Article_Linked', True) ],
  [ ('ClosedDate', '2021-01-29T12:46:38.000+0000'), ('Is_Article_Linked', True) ],
  [ ('ClosedDate', '2021-01-11T12:46:38.000+0000'), ('Is_Article_Linked', False) ],
  [ ('ClosedDate', '2021-01-03T12:46:38.000+0000'), ('Is_Article_Linked', False) ],
  [ ('ClosedDate', '2021-01-12T12:46:38.000+0000'), ('Is_Article_Linked', True) ]
]

df_ld = pd.DataFrame(data, columns=['ClosedDate', 'Is_Article_Linked'])
# Formatting the date field
df_ld['ClosedDate'] = pd.to_datetime(df_ld['ClosedDate'],  format="%y-%m-%d", exact=False)
# Grouping by Month
relevant_links = df_ld.resample('M', on='ClosedDate').count()
# Renaming the index
relevant_links.index = relevant_links.index.rename('Date')
# Outputting to  a dictionary
link_accuracy_by_month = relevant_links.reset_index().to_dict('records')
print(link_accuracy_by_month)

这个输出是[{'Date': Timestamp('2021-01-31 00:00:00'), 'ClosedDate': 5, 'Is_Article_Linked': 5}]

我期待看到的是[{'Date': Timestamp('2021-01-31 00:00:00'), 'ClosedDate': 5, 'Is_Article_Linked': 3}]

所以 ClosedDate 是我的总记录,Is_Article_Linked 只是计算 True 的记录。目前它正在计算所有这些,因为我认为它在那里看到了一个值。

有没有办法得到我想要的结果?我相信我的答案在重新采样中,但我只是想不出如何让它只计算真实的。

提前致谢!

假设您提供的数据格式不正确,因此数据框实际看起来像:

  ClosedDate  Is_Article_Linked
0 2021-01-18               True
1 2021-01-29               True
2 2021-01-11              False
3 2021-01-03              False
4 2021-01-12               True

你可以这样做:

df_ld.resample("M", on = "ClosedDate")\
    .agg({"ClosedDate": "count", "Is_Article_Linked":"sum"})\
    .rename_axis("Date")\
    .reset_index()\
    .to_dict("records")

输出

[{'Date': Timestamp('2021-01-31 00:00:00'),
  'ClosedDate': 5,
  'Is_Article_Linked': 3}]