我的日期框架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
我该如何完成?
答案 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