Skip to content Skip to sidebar Skip to footer

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"