【问题标题】:Output by average per day (Mon, Tue, etc.)平均每天的产出(周一、周二等)
【发布时间】:2018-09-08 12:32:28
【问题描述】:

目前我有一个包含数千行的 csv 文件。每行显示日期和时间,但不按升序排列。如何根据天数(周一、周二、周三等)计算事件/发生次数?此外,它应该是每天的平均发生次数。例如每个星期一的平均出现次数是 712,每个星期二是 853,等等。

到目前为止,我设法使用该行添加了相应日期的列

df['DAY'] = pd.to_datetime(df['DATE']).dt.day_name()

First 10 rows 但我不知道如何继续使用 Python 生成包含每天平均出现次数(周一、周二等)的输出。

输出应显示: [周一平均,周二平均,周三等]

【问题讨论】:

  • 您需要向我们展示示例输入数据框和示例的预期输出。请同时包含用于实例化数据帧的代码(不仅仅是其字符串表示形式)。
  • 我已编辑以显示更多信息。
  • 遗憾的是,您的编辑没有涵盖我给您的写一个好问题的提示。
  • 我才刚刚开始学习python,因此我可能无法完全理解究竟需要什么。
  • 1.问题本身中的示例数据框。 2. 实例化数据框的代码(不是必需的,但非常感谢)。 3. 具有给定样本所需结果的数据框。 -- 所有这些都是文本,而不是图片。

标签: python pandas average


【解决方案1】:

返回具有指定语言环境的 DateTimeIndex 的日期名称(周一至周日)

df['DAY'] = pd.to_datetime(df['DATE']).dt.day_name()

如果您还没有要聚合的列,请创建一个列来表示发生的实例:

#I'm assuming each day refers to a unique "instance" or occurrence 
#but this does not have to follow if you already have a column to count/aggregate
df['OCCURENCE'] = 1

要返回给定日期的平均出现次数,只需使用 groupby 语句并指定要平均的组:

group_df = df.groupby('DAY')['OCCURENCE'].mean()

为了满足将所有内容都放在列表中的奇怪格式要求

output_list = []
for day in group_df.index:
    avg = group_df.loc[day][0]
    str_format = 'average for {d}:{v}'.foramt(d=day, v=avg) 
    output_list.append(str_format)

new_list = ' '.join(output_list)

【讨论】:

  • 我已编辑问题以显示更多信息。我需要将输出显示在这样的单行中:[Monaverage for Mon average for Tue average for Wed etc.]
  • 您可以简单地遍历我创建的 df 以附加到列表中“group_df”。我会将其添加为我的代码的扩展。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
  • 2015-08-19
  • 2018-12-19
  • 2017-04-17
  • 1970-01-01
  • 2016-12-24
  • 1970-01-01
相关资源
最近更新 更多