Python 3.x 两个数据帧列中的值计数之间差值的累积和

Python 3.x 两个数据帧列中的值计数之间差值的累积和,python-3.x,pandas,dataframe,series,Python 3.x,Pandas,Dataframe,Series,下面的图表显示了我的基本挑战:从有数据开始的股票数量中减去有数据结束的股票数量。我面临的挑战是,每个系列的日期范围不匹配,因此我需要将两个集合合并到一个公共日期范围,执行减法,并将结果保存到一个新的逗号分隔值文件中 名为“meta.csv”的文件中的输入数据包含3187行。每行字段都是股票代码、开始和结束的数据。头部和尾部如图所示: 0000 ticker,start,end 0001 A,1999-11-18,2016-12-27 0002 AA,2016-11-01,2016-12-27 0

下面的图表显示了我的基本挑战:从有数据开始的股票数量中减去有数据结束的股票数量。我面临的挑战是,每个系列的日期范围不匹配,因此我需要将两个集合合并到一个公共日期范围,执行减法,并将结果保存到一个新的逗号分隔值文件中

名为“meta.csv”的文件中的输入数据包含3187行。每行字段都是股票代码、开始和结束的数据。头部和尾部如图所示:

0000 ticker,start,end 0001 A,1999-11-18,2016-12-27 0002 AA,2016-11-01,2016-12-27 0003 AAL,2005-09-27,2016-12-27 0004 AAMC,2012-12-13,2016-12-27 0005 AAN,1984-09-07,2016-12-27 ... 3183 ZNGA,2011-12-16,2016-12-27 3184 ZOES,2014-04-11,2016-12-27 3185 ZQK,1990-03-26,2015-09-09 3186 ZTS,2013-02-01,2016-12-27 3187 ZUMZ,2005-05-06,2016-12-27 删除上述代码注释时的图表输出:

我想创建一个人口文件,其中包含具有活动数据的股票的日期和数量,其头尾应如下所示:

date,num_stocks 1962-01-02,11 1962-11-19,12 1970-01-02,30 1971-08-06,31 1972-06-01,54 ... 2016-12-08,2642 2016-12-15,2641 2016-12-16,2640 2016-12-21,2639 2016-12-27,2639 日期,库存数量 1962-01-02,11 1962-11-19,12 1970-01-02,30 1971-08-06,31 1972-06-01,54 ... 2016-12-08,2642 2016-12-15,2641 2016-12-16,2640 2016-12-21,2639 2016-12-27,2639
最终目标是通过读取人口文件,能够绘制任何指定日期范围内的股票数量数据。

将日期与其各自的计数对齐。我将取
pd.Series.value\u计数的差值

df.start.value_counts().sub(df.end.value_counts(), fill_value=0)

1984-09-07    1.0
1990-03-26    1.0
1999-11-18    1.0
2005-05-06    1.0
2005-09-27    1.0
2011-12-16    1.0
2012-12-13    1.0
2013-02-01    1.0
2014-04-11    1.0
2015-09-09   -1.0
2016-11-01    1.0
2016-12-27   -9.0
dtype: float64

多亏了piRSquared提供的关键提示,我使用以下代码解决了这个难题:

import pandas as pd

df = pd.read_csv('meta.csv')
x = df.start.value_counts().sub(df.end.value_counts(), fill_value=0)
x.iloc[-1] = 0
r = x.cumsum()
r.to_csv('pop.csv')
z = pd.read_csv('pop.csv', index_col=0, header=None)
z.plot(title='NUMBER OF STOCKS WITH DATA',legend=None,
       grid=True,style='k.')
“pop.csv”文件头/尾:

1962-01-02 11.0 1962-11-19 12.0 1970-01-02 30.0 1971-08-06 31.0 1972-06-01 54.0 ... 2016-12-08 2642.0 2016-12-15 2641.0 2016-12-16 2640.0 2016-12-21 2639.0 2016-12-27 2639.0 1962-01-02 11.0 1962-11-19 12.0 1970-01-02 30.0 1971-08-06 31.0 1972-06-01 54.0 ... 2016-12-08 2642.0 2016-12-15 2641.0 2016-12-16 2640.0 2016-12-21 2639.0 2016-12-27 2639.0 图表:


感谢您提出的这一非常有用的建议,它帮助我制定了一个看似正确的解决方案的方案。我需要写下人口档案并检查一遍,然后尽快发布我自己问题的答案。 1962-01-02 11.0 1962-11-19 12.0 1970-01-02 30.0 1971-08-06 31.0 1972-06-01 54.0 ... 2016-12-08 2642.0 2016-12-15 2641.0 2016-12-16 2640.0 2016-12-21 2639.0 2016-12-27 2639.0