Skip to content

Commit 357f269

Browse files
authored
Merge pull request #145 from bashtage/futher-perf
ENH: Improve performance of PanelOLS
2 parents 990b5cd + 5e6a337 commit 357f269

File tree

4 files changed

+14
-12
lines changed

4 files changed

+14
-12
lines changed

README.rst

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,10 @@ The master branch can be installed by cloning the repo and running setup
105105
Documentation
106106
-------------
107107

108-
`Stable Documentation <https://bashtage.github.io/linearmodels/>`__
109-
is built on every tagged version using
108+
`Stable Documentation <https://bashtage.github.io/linearmodels/>`__ is
109+
built on every tagged version using
110110
`doctr <https://github.com/drdoctr/doctr>`__. `Development
111-
Documentation <https://bashtage.github.io/linearmodels/devel/>`__ is
111+
Documentation <https://bashtage.github.io/linearmodels/devel>`__ is
112112
automatically built on every successful build of master.
113113

114114
Plan and status
@@ -137,9 +137,9 @@ others are the version that are being used in the test environment. It
137137
is possible that older versions work.
138138

139139
- **Python 3.5+**: extensive use of ``@`` operator
140-
- NumPy (1.11+)
140+
- NumPy (1.12+)
141141
- SciPy (0.18+)
142-
- pandas (0.19+)
142+
- pandas (0.20+)
143143
- statsmodels (0.8+)
144144
- xarray (0.9+, optional)
145145

linearmodels/panel/data.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ def __init__(self, df):
3535
index = df.index
3636
self._major_axis = pd.Series(index.levels[1][index.labels[1]]).unique()
3737
self._minor_axis = pd.Series(index.levels[0][index.labels[0]]).unique()
38-
full_index = list(product(self._minor_axis, self._major_axis))
39-
self._full_index = pd.MultiIndex.from_tuples(full_index)
40-
new_df = df.copy().loc[self._full_index]
38+
self._full_index = pd.MultiIndex.from_product([self._minor_axis,
39+
self._major_axis])
40+
new_df = df.reindex(self._full_index)
4141
self._frame = new_df
4242
i, j, k = len(self._items), len(self._major_axis), len(self.minor_axis)
4343
self._shape = (i, j, k)
@@ -507,7 +507,7 @@ def count(self, group='entity'):
507507
index = self.panel.minor_axis if group == 'entity' else self.panel.major_axis
508508
out = DataFrame(count.T, index=index, columns=self.vars)
509509
reindex = self.entities if group == 'entity' else self.time
510-
out = out.loc[reindex].astype(np.int64)
510+
out = out.reindex(reindex).astype(np.int64)
511511
out.index.name = group
512512
return out
513513

@@ -550,7 +550,7 @@ def mean(self, group='entity', weights=None):
550550
mu = weighted_sum / sum_weights
551551

552552
reindex = self.entities if group == 'entity' else self.time
553-
out = mu.loc[reindex]
553+
out = mu.reindex(reindex)
554554

555555
return out
556556

linearmodels/panel/model.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -370,8 +370,9 @@ def deferred_f():
370370

371371
def _prepare_between(self):
372372
"""Prepare values for between estimation of R2"""
373-
y = self.dependent.mean('entity', weights=self.weights).values
374-
x = self.exog.mean('entity', weights=self.weights).values
373+
weights = self.weights if self._is_weighted else None
374+
y = self.dependent.mean('entity', weights=weights).values
375+
x = self.exog.mean('entity', weights=weights).values
375376
# Weight transformation
376377
wcount, wmean = self.weights.count('entity'), self.weights.mean('entity')
377378
wsum = wcount * wmean

linearmodels/utility.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
from linearmodels.compat.numpy import lstsq
1313

14+
1415
class MissingValueWarning(Warning):
1516
pass
1617

0 commit comments

Comments
 (0)