时间序列数据框,在每个月的第一个交易日增加固定头寸,如何在熊猫中完成?

时间:2018-03-04 02:41:06

标签: python pandas date

我的日期框架df如下:

date       open      high   low     close
2007/11/02  22757   22855   22564   22620
2007/11/05  22922   22964   22349   22475
2007/11/06  22540   22755   22404   22734
2007/11/07  23058   23251   22811   22929
2007/11/08  22740   22936   22683   22783
... ... ... ... ...
2007/11/28  21841   22040   21703   21776
2007/11/29  22000   22055   21586   21827
2007/11/30  21750   22169   21694   21935
2007/12/03  21782   21935   21469   21527
2007/12/04  21453   21760   21378   21648
2007/12/05  21725   21836   21526   21627
2007/12/06  21460   21787   21454   21632
2007/12/07  21836   21909   21699   21865
... ... ... ... ...
2007/12/26  23352   23556   23298   23456
2007/12/27  23523   23744   23276   23333
2007/12/28  23338   23449   23112   23225
2008/01/02  23225   23388   23174   23183
2008/01/03  23259   23379   23197   23287
2008/01/04  23450   24164   23406   24152

2008/01/24  23079   23386   22969   23292
2008/01/25  23502   23754   23369   23678
2008/01/28  23617   23627   23229   23371

现在我想添加一个名为POS的列,它需要在每个月的第一个交易日自动添加固定头寸。期望的结果如下:

date    open        high    low    close    pos

2007/11/02  22757   22855   22564   22620   100
2007/11/05  22922   22964   22349   22475   100
2007/11/06  22540   22755   22404   22734   100
2007/11/07  23058   23251   22811   22929   100
2007/11/08  22740   22936   22683   22783   100
... ... ... ... ... ...
2007/11/28  21841   22040   21703   21776   100
2007/11/29  22000   22055   21586   21827   100
2007/11/30  21750   22169   21694   21935   100
2007/12/03  21782   21935   21469   21527   200
2007/12/04  21453   21760   21378   21648   200
2007/12/05  21725   21836   21526   21627   200
2007/12/06  21460   21787   21454   21632   200
2007/12/07  21836   21909   21699   21865   200
... ... ... ... ... ...
2007/12/26  23352   23556   23298   23456   200
2007/12/27  23523   23744   23276   23333   200
2007/12/28  23338   23449   23112   23225   200
2008/01/02  23225   23388   23174   23183   300
2008/01/03  23259   23379   23197   23287   300
2008/01/04  23450   24164   23406   24152   300

2008/01/24  23079   23386   22969   23292   300
2008/01/25  23502   23754   23369   23678   300
2008/01/28  23617   23627   23229   23371   300

我该如何完成?

1 个答案:

答案 0 :(得分:4)

如果您还没有将date列投放到DateTime:

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

如果数据尚未按日期排序,请务必这样做(感谢@PiRSquared):

df.sort_values(by='date', inplace=True)

创建所需的列值:

df['pos'] = df['date'].dt.month.diff().ne(0).cumsum()*100

df
         date   open   high    low  close  pos
0  2007-11-02  22757  22855  22564  22620  100
1  2007-11-05  22922  22964  22349  22475  100
2  2007-11-06  22540  22755  22404  22734  100
3  2007-11-07  23058  23251  22811  22929  100
4  2007-11-08  22740  22936  22683  22783  100
5  2007-11-28  21841  22040  21703  21776  100
6  2007-11-29  22000  22055  21586  21827  100
7  2007-11-30  21750  22169  21694  21935  100
8  2007-12-03  21782  21935  21469  21527  200
9  2007-12-04  21453  21760  21378  21648  200
10 2007-12-05  21725  21836  21526  21627  200
11 2007-12-06  21460  21787  21454  21632  200
12 2007-12-07  21836  21909  21699  21865  200
13 2007-12-26  23352  23556  23298  23456  200
14 2007-12-27  23523  23744  23276  23333  200
15 2007-12-28  23338  23449  23112  23225  200
16 2008-01-02  23225  23388  23174  23183  300
17 2008-01-03  23259  23379  23197  23287  300
18 2008-01-04  23450  24164  23406  24152  300
19 2008-01-24  23079  23386  22969  23292  300
20 2008-01-25  23502  23754  23369  23678  300
21 2008-01-28  23617  23627  23229  23371  300