1
1
from itertools import product
2
2
3
3
import numpy as np
4
- import pandas as pd
5
- from pandas import DataFrame , Panel , Series
4
+ from pandas import DataFrame , Panel , Series , MultiIndex , get_dummies , Categorical
6
5
7
6
from linearmodels .compat .numpy import lstsq
8
7
from linearmodels .compat .pandas import (is_categorical ,
@@ -32,10 +31,10 @@ class _Panel(object):
32
31
def __init__ (self , df ):
33
32
self ._items = df .columns
34
33
index = df .index
35
- self ._major_axis = pd . Series (index .levels [1 ][index .labels [1 ]]).unique ()
36
- self ._minor_axis = pd . Series (index .levels [0 ][index .labels [0 ]]).unique ()
37
- self ._full_index = pd . MultiIndex .from_product ([self ._minor_axis ,
38
- self ._major_axis ])
34
+ self ._major_axis = Series (index .levels [1 ][index .labels [1 ]]).unique ()
35
+ self ._minor_axis = Series (index .levels [0 ][index .labels [0 ]]).unique ()
36
+ self ._full_index = MultiIndex .from_product ([self ._minor_axis ,
37
+ self ._major_axis ])
39
38
new_df = df .reindex (self ._full_index )
40
39
self ._frame = new_df
41
40
i , j , k = len (self ._items ), len (self ._major_axis ), len (self .minor_axis )
@@ -45,12 +44,12 @@ def __init__(self, df):
45
44
@classmethod
46
45
def from_array (cls , values , items , major_axis , minor_axis ):
47
46
index = list (product (minor_axis , major_axis ))
48
- index = pd . MultiIndex .from_tuples (index )
47
+ index = MultiIndex .from_tuples (index )
49
48
i , j , k = len (items ), len (major_axis ), len (minor_axis )
50
49
values = np .swapaxes (values .copy (), 0 , 2 ).ravel ()
51
50
values = np .reshape (values , ((j * k ), i ))
52
51
53
- df = pd . DataFrame (values , index = index , columns = items )
52
+ df = DataFrame (values , index = index , columns = items )
54
53
return cls (df )
55
54
56
55
@property
@@ -82,7 +81,7 @@ def convert_columns(s, drop_first):
82
81
s = s .astype ('category' )
83
82
84
83
if is_categorical (s ):
85
- out = pd . get_dummies (s , drop_first = drop_first )
84
+ out = get_dummies (s , drop_first = drop_first )
86
85
out .columns = [str (s .name ) + '.' + str (c ) for c in out ]
87
86
return out
88
87
return s
@@ -169,18 +168,18 @@ def __init__(self, x, var_name='x', convert_dummies=True, drop_first=True, copy=
169
168
except ImportError :
170
169
pass
171
170
172
- if isinstance (x , Series ) and isinstance (x .index , pd . MultiIndex ):
171
+ if isinstance (x , Series ) and isinstance (x .index , MultiIndex ):
173
172
x = DataFrame (x )
174
173
elif isinstance (x , Series ):
175
174
raise ValueError ('Series can only be used with a 2-level MultiIndex' )
176
175
177
176
if isinstance (x , (Panel , DataFrame )):
178
177
if isinstance (x , DataFrame ):
179
- if isinstance (x .index , pd . MultiIndex ):
178
+ if isinstance (x .index , MultiIndex ):
180
179
if len (x .index .levels ) != 2 :
181
180
raise ValueError ('DataFrame input must have a '
182
181
'MultiIndex with 2 levels' )
183
- if isinstance (self ._original , (pd . DataFrame , PanelData , pd . Series )):
182
+ if isinstance (self ._original , (DataFrame , PanelData , Series )):
184
183
for i in range (2 ):
185
184
index_names [i ] = x .index .levels [i ].name or index_names [i ]
186
185
self ._frame = x
@@ -388,9 +387,9 @@ def general_demean(self, groups, weights=None):
388
387
if not isinstance (groups , PanelData ):
389
388
groups = PanelData (groups )
390
389
if weights is None :
391
- weights = PanelData (pd . DataFrame (np .ones ((self ._frame .shape [0 ], 1 )),
392
- index = self .index ,
393
- columns = ['weights' ]))
390
+ weights = PanelData (DataFrame (np .ones ((self ._frame .shape [0 ], 1 )),
391
+ index = self .index ,
392
+ columns = ['weights' ]))
394
393
weights = weights .values2d
395
394
groups = groups .values2d .astype (np .int64 , copy = False )
396
395
@@ -417,11 +416,11 @@ def demean_pass(frame, weights, root_w):
417
416
return frame
418
417
419
418
# Swap out the index for better performance
420
- init_index = pd . DataFrame (groups )
419
+ init_index = DataFrame (groups )
421
420
init_index .set_index (list (init_index .columns ), inplace = True )
422
421
423
422
root_w = np .sqrt (weights )
424
- weights = pd . DataFrame (weights , index = init_index .index )
423
+ weights = DataFrame (weights , index = init_index .index )
425
424
wframe = root_w * self ._frame
426
425
wframe .index = init_index .index
427
426
@@ -619,7 +618,7 @@ def dummies(self, group='entity', drop_first=False):
619
618
axis = 0 if group == 'entity' else 1
620
619
labels = self ._frame .index .labels
621
620
levels = self ._frame .index .levels
622
- cat = pd . Categorical (levels [axis ][labels [axis ]])
623
- dummies = pd . get_dummies (cat , drop_first = drop_first )
621
+ cat = Categorical (levels [axis ][labels [axis ]])
622
+ dummies = get_dummies (cat , drop_first = drop_first )
624
623
cols = self .entities if group == 'entity' else self .time
625
624
return dummies [[c for c in cols if c in dummies ]].astype (np .float64 , copy = False )
0 commit comments