【问题标题】:Count frequency and plot计数频率和绘图
【发布时间】:2020-07-13 19:36:12
【问题描述】:

我需要按日期绘制项目的频率。我的 csv 包含三列:一列用于Date,一列用于Name & Surname,另一列用于Birthday。 我有兴趣绘制日期中记录的人的频率。我的预期输出是:

         Date  Count
0   01/01/2018      9
1   01/02/2018     12
2   01/03/2018      6
3   01/04/2018      4
4   01/05/2018      5
..         ...    ...
..  02/27/2020    122
..  02/28/2020     84

上表找到如下:

by_date = df.groupby(df['Date']).size().reset_index(name='Count')

Date 是我的 csv 文件中的一列,但不是 Count。这解释了我难以绘制线图的原因。

如何将频率绘制为数字/列列表?

【问题讨论】:

  • 你的命令应该给出预期的输出。
  • 是的,但不是情节。我无法绘制频率
  • 你的绘图命令是什么?它给了什么?你预期的情节是什么?
  • 我应该期望按日期绘制频率,如上表所示(按日期计数)。我只是将 plot() 应用于 by_date
  • by_date.plot(x='Date') 或者by_date.plot.bar(x='Date')?

标签: python pandas matplotlib pandas-groupby


【解决方案1】:

虽然不是绝对必需的,但您应该将Date 列转换为Timestamp 以便在以后的步骤中进行分析:

df['Date'] = pd.to_datetime(df['Date'])

现在,回答您的问题。要统计每天的出生人数,您可以使用value_counts

births = df['Date'].value_counts()

但您甚至不必为绘制直方图而这样做!使用hist:

import matplotlib.dates as mdates
year = mdates.YearLocator()
month = mdates.MonthLocator()
formatter = mdates.ConciseDateFormatter(year)

ax = df['Date'].hist()
ax.set_title('# of births')
ax.xaxis.set_major_locator(year)
ax.xaxis.set_minor_locator(month)
ax.xaxis.set_major_formatter(formatter)

结果(来自随机数据):

【讨论】:

  • 感谢代码不同。不幸的是,它不适用于ConciseDateFormatter。我收到一个错误:no attribute 'ConciseDateFormatter
  • 我的错。忘记前缀了。使用mdates.ConciseDateFormatter
  • 不幸的是,添加前缀也无法正常工作。不知道是不是因为我的版本(应该是3.1)
  • 同上。添加前缀后我报告了错误(我注意到它在您的代码中丢失了)
  • 检查你的matplotlib版本,我不知道ConciseDateFormatter是什么时候添加的,但是尝试更新到最新版本
猜你喜欢
  • 1970-01-01
  • 2019-07-19
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
  • 2013-06-11
  • 1970-01-01
相关资源
最近更新 更多