Skip to content

Commit 1fb395c

Browse files
authored
Merge pull request #5 from BuildingEnergySimulationTools/drop-columns
Drop columns
2 parents b2b4ace + 34f841a commit 1fb395c

File tree

2 files changed

+57
-4
lines changed

2 files changed

+57
-4
lines changed

tests/test_processing.py

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
AddTimeLag,
1313
ApplyExpression,
1414
Resample,
15-
ColumnsCombine,
15+
CombineColumns,
1616
ReplaceThreshold,
1717
DropTimeGradient,
1818
Dropna,
@@ -34,6 +34,7 @@
3434
AddSolarAngles,
3535
ProjectSolarRadOnSurfaces,
3636
FillOtherColumns,
37+
DropColumns,
3738
)
3839

3940
RESOURCES_PATH = Path(__file__).parent / "resources"
@@ -458,7 +459,7 @@ def test_pd_combine_columns(self):
458459
index=pd.date_range("2009", freq="h", periods=2),
459460
)
460461

461-
trans = ColumnsCombine(
462+
trans = CombineColumns(
462463
function=np.sum,
463464
columns=["a__°C", "b__°C"],
464465
function_kwargs={"axis": 1},
@@ -481,7 +482,7 @@ def test_pd_combine_columns(self):
481482

482483
pd.testing.assert_frame_equal(trans.fit_transform(x_in), ref)
483484

484-
trans = ColumnsCombine(
485+
trans = CombineColumns(
485486
function=np.sum,
486487
tide_format_columns="°C",
487488
function_kwargs={"axis": 1},
@@ -820,3 +821,27 @@ def test_fill_other_columns(self):
820821
np.isnan(res["col_1"])
821822
== np.isnan([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, np.nan, np.nan])
822823
)
824+
825+
def test_drop_columns(self):
826+
df = pd.DataFrame(
827+
{"a": [1, 2], "b": [1, 2], "c": [1, 2]},
828+
index=pd.date_range("2009", freq="h", periods=2),
829+
)
830+
831+
col_dropper = DropColumns()
832+
col_dropper.fit(df)
833+
res = col_dropper.transform(df.copy())
834+
835+
pd.testing.assert_frame_equal(df, res)
836+
837+
col_dropper = DropColumns(columns="a")
838+
col_dropper.fit(df)
839+
res = col_dropper.transform(df.copy())
840+
841+
pd.testing.assert_frame_equal(df[["b", "c"]], res)
842+
843+
col_dropper = DropColumns(columns=["a", "b", "c"])
844+
col_dropper.fit(df)
845+
res = col_dropper.transform(df.copy())
846+
847+
assert res.shape == (2, 0)

tide/processing.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -906,7 +906,7 @@ def _transform_implementation(self, X: pd.Series | pd.DataFrame):
906906
return X.apply(gauss_filter)
907907

908908

909-
class ColumnsCombine(BaseProcessing):
909+
class CombineColumns(BaseProcessing):
910910
"""
911911
A class that combines multiple columns in a pandas DataFrame using a specified
912912
function.
@@ -1576,3 +1576,31 @@ def _transform_implementation(self, X: pd.Series | pd.DataFrame):
15761576
if self.drop_filling_columns
15771577
else X
15781578
)
1579+
1580+
1581+
class DropColumns(BaseProcessing):
1582+
"""
1583+
Drop specified columns.
1584+
1585+
Parameters
1586+
----------
1587+
columns : str or list[str], optional
1588+
The column name or a list of column names to be dropped.
1589+
If None, no columns are dropped.
1590+
1591+
"""
1592+
1593+
def __init__(self, columns: str | list[str] = None):
1594+
self.columns = columns
1595+
BaseProcessing.__init__(self)
1596+
1597+
def _fit_implementation(self, X: pd.Series | pd.DataFrame, y=None):
1598+
self.required_columns = self.columns
1599+
self.removed_columns = self.columns
1600+
1601+
def _transform_implementation(self, X: pd.Series | pd.DataFrame):
1602+
return (
1603+
X.drop(self.removed_columns, axis="columns")
1604+
if self.columns is not None
1605+
else X
1606+
)

0 commit comments

Comments
 (0)