Python: Accessing The Proper Values In An Array
I want to calculate the following equation: calc = value_a(2D) - (value_b(0D) + value_b(1D))/10000 value_a(2D) corresponds to type **a**, year **2D** and value **1.1275** value_b(
Solution 1:
It looks like you really could use a multi-index here:
In [4]: df.reset_index(inplace=True)
In [5]: df
Out[5]:
type year date value
0 a 2D 2015-02-09 1.1275
1 b 10M 2015-02-09 58.1250
2 b 11M 2015-02-09 68.3750
3 b 1M 2015-02-09 3.3450
4 b 1W 2015-02-09 0.8900
5 b 1Y 2015-02-09 79.3750
6 b 2M 2015-02-09 7.5350
7 b 2W 2015-02-09 1.8000
8 b 3M 2015-02-09 11.6100
9 b 3W 2015-02-09 2.4800
10 b 4M 2015-02-09 16.2000
11 b 5M 2015-02-09 21.6500
12 b 6M 2015-02-09 27.1000
13 b 7M 2015-02-09 33.6250
14 b 8M 2015-02-09 41.3750
15 b 9M 2015-02-09 49.5000
16 b 0D 2015-02-09 0.0000
17 b 1D 2015-02-09 0.1250
In [6]: df.set_index(['type','year'], inplace=True)
In [7]: df
Out[7]:
date value
type year
a 2D 2015-02-09 1.1275
b 10M 2015-02-09 58.1250
11M 2015-02-09 68.3750
1M 2015-02-09 3.3450
1W 2015-02-09 0.8900
1Y 2015-02-09 79.3750
2M 2015-02-09 7.5350
2W 2015-02-09 1.8000
3M 2015-02-09 11.6100
3W 2015-02-09 2.4800
4M 2015-02-09 16.2000
5M 2015-02-09 21.6500
6M 2015-02-09 27.1000
7M 2015-02-09 33.6250
8M 2015-02-09 41.3750
9M 2015-02-09 49.5000
0D 2015-02-09 0.0000
1D 2015-02-09 0.1250
Then simply:
In [8]: df.loc['a','2D'].value - (df.loc['b', '0D'].value + df.loc['b','1D'].value)/10000
Out[8]: 1.1274875
Note, suppose I have multiple years (this I made by simply concatenating the df to itself):
In [24]: df2
Out[24]:
type year date value
0 a 2D 2015-02-09 1.1275
1 b 10M 2015-02-09 58.1250
2 b 11M 2015-02-09 68.3750
3 b 1M 2015-02-09 3.3450
4 b 1W 2015-02-09 0.8900
5 b 1Y 2015-02-09 79.3750
6 b 2M 2015-02-09 7.5350
7 b 2W 2015-02-09 1.8000
8 b 3M 2015-02-09 11.6100
9 b 3W 2015-02-09 2.4800
10 b 4M 2015-02-09 16.2000
11 b 5M 2015-02-09 21.6500
12 b 6M 2015-02-09 27.1000
13 b 7M 2015-02-09 33.6250
14 b 8M 2015-02-09 41.3750
15 b 9M 2015-02-09 49.5000
16 b 0D 2015-02-09 0.0000
17 b 1D 2015-02-09 0.1250
18 a 2D 2015-02-10 1.1275
19 b 10M 2015-02-10 58.1250
20 b 11M 2015-02-10 68.3750
21 b 1M 2015-02-10 3.3450
22 b 1W 2015-02-10 0.8900
23 b 1Y 2015-02-10 79.3750
24 b 2M 2015-02-10 7.5350
25 b 2W 2015-02-10 1.8000
26 b 3M 2015-02-10 11.6100
27 b 3W 2015-02-10 2.4800
28 b 4M 2015-02-10 16.2000
29 b 5M 2015-02-10 21.6500
30 b 6M 2015-02-10 27.1000
31 b 7M 2015-02-10 33.6250
32 b 8M 2015-02-10 41.3750
33 b 9M 2015-02-10 49.5000
34 b 0D 2015-02-10 0.0000
35 b 1D 2015-02-10 0.1250
In [25]: df.iloc[-2,-1] = 100000 # this corresponds to (b, 0D) and used to be 0
As @cᴏʟᴅsᴘᴇᴇᴅ noted, you can group by the 'date'
column:
In [26]: df2.groupby('date').apply(
...: lambda df:
...: df.loc['a','2D'].value
...: - (df.loc['b', '0D'].value + df.loc['b','1D'].value)
...: / 10000
...: )
Out[27]:
date
2015-02-09 1.127487
2015-02-10 -8.872513
dtype: float64
Post a Comment for "Python: Accessing The Proper Values In An Array"