python - 计算出现次数后,如何在列表中输入每天的条目

标签 python list date for-loop count

我在两个单独的 csv 文件中有两列日期。我正在将它们读入 python,并计划在 matplotlib 中进行绘图

其中一个用于发票:

5/1/2015
5/1/2015
5/1/2015
5/2/2015
5/2/2015
5/2/2015
5/2/2015
5/3/2015
5/3/2015
5/3/2015
5/3/2015
5/4/2015
5/4/2015
5/4/2015
5/4/2015
5/4/2015
5/4/2015
5/5/2015
5/5/2015
5/5/2015
5/5/2015
5/7/2015

另一个是争议:

5/1/2015
5/1/2015
5/2/2015
5/2/2015
5/3/2015
5/5/2015
5/5/2015

我想制作一个列表,其中争议数量除以每天的发票数量。因此,2015 年 5 月 1 日的百分比为 2/3。 2015 年 5 月 2 日 2/4。 2015 年 5 月 3 日是 1/4。 2015 年 5 月 4 日是 0。2015 年 5 月 5 日是 2/4。 2015 年 5 月 6 日没有发票或争议,因此百分比应为零。因此列表应该是 [.66, .5, .25, 0, .5, 0, 0]

然后我将在 y 轴上绘制百分比,在 x 轴上绘制日期。

我尝试使用 df.index.day 但后来我得到了每月第一天、第二天等的组。我使用 value_counts 来计算每个日期的出现次数,然后在两个列表之间进行划分,但是我丢失了没有发票或争议的号码,我希望每一天都有一个值(value)。

有人知道一个简单的方法吗?

最佳答案

获取计数的一种简单方法是使用collections.Counter:

from collections import Counter
with open('invoice_dates') as f:
    invoice_count = Counter(line.strip() for line in f)

对于dispute_count也类似。然后,您可以获得将日期映射到争议百分比的字典

from __future__ import division # in case you are on Python 2.x
dispute_percentage = {date: dispute_count.get(date, 0) / invoices
                      for date, invoices in invoice_count.items()}

如果您使用的是 Python 2.x,请在最后一行使用 iteritems() 而不是 items()

关于python - 计算出现次数后,如何在列表中输入每天的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32081494/

相关文章:

python - 如何在python中将列表写入文件

python - psycopg2 "TypeError: not all arguments converted during string formatting"

python - Python 上的菜单循环

python - 如何删除字典多个元组中的重复项?

android - 在 Android SQLite 中存储日期和时间

javascript - 如何格式化 BC 日期(如 "-700-01-01")?

php - MySQL 中看似不正确的时区转换(UTC 到 PST)

python - cqlsh 错误 :root:code for hash md5 was not found

python - 对任意数量的叠瓦级别进行编码的更优雅的方法

list - Erlang 记录项列表