我在两个单独的 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/