-
Notifications
You must be signed in to change notification settings - Fork 10
/
table.py
76 lines (59 loc) · 2.16 KB
/
table.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import numpy as np
import pandas as pd
from cge_tools import Series, empty_recarray
class Table(object):
def __init__(self, index, columns, sam):
self.sam = pd.DataFrame(sam, index=index, columns=columns)
self.index=self.sam.index
self.columns=self.sam.columns
@classmethod
def empty(cls, index, columns):
sam = np.zeros(shape=(len(index), len(columns)))
return cls(index=index, columns=columns, sam=sam)
@classmethod
def unflatten(cls, index, columns, sam):
return cls(sam=np.reshape(
sam,
newshape=(len(index), len(columns))),
index=index,
columns=columns
)
def __getitem__(self, row):
return self.sam[row]
def __setitem__(self, row, value):
self.sam[row] = value
def __repr__(self):
return self.sam.__repr__()
def __str__(self):
return str(self.sam)
def __len__(self):
return len(self.sam)
def __delitem__(self, row):
del self.sam[row]
def inputs(self, inputs, to):
fields = empty_recarray(inputs)
for i, I in enumerate(inputs):
fields[i] = self.sam[to][I]
return Series(inputs, fields)
def sub_matrix(self, columns, rows):
matrix = pd.DataFrame(index=rows, columns=columns)
for c in columns:
for r in rows:
matrix[c][r] = self.sam[c][r]
return matrix
def sum_by_rows(self, rows):
sums = empty_recarray(rows)
for r, R in enumerate(rows):
sums[r] = sum(self.sam.ix[R])
return Series(rows, sums)
def sum_selected_columns_by_rows(self, rows, columns):
sums = empty_recarray(rows)
for r, R in enumerate(rows):
sums[r] = sum([self.sam.ix[R][C] for C in columns])
return Series(rows, sums)
def matrix(self):
return np.matrix(self.sam)
def replace(self, m):
return Table(sam=self.sam, index=self.sam.index, columns=self.sam.columns)
def array(self):
return self.sam.values