From 37fb27ed1728eac5ed9b548db6caed52fc9ef200 Mon Sep 17 00:00:00 2001 From: wyq Date: Wed, 14 Jun 2023 13:10:55 +0800 Subject: [PATCH] update replace and loc functions of DataFrame --- .../org/meteoinfo/dataframe/DataFrame.java | 220 +++++++++++++++++- meteoinfo-lab/milconfig.xml | 20 +- .../mipylib/dataframe/dataframe$py.class | Bin 56741 -> 59309 bytes .../pylib/mipylib/dataframe/dataframe.py | 74 +++++- .../pylib/mipylib/dataframe/index$py.class | Bin 18847 -> 18995 bytes .../pylib/mipylib/dataframe/index.py | 4 + .../mipylib/numeric/core/numeric$py.class | Bin 153231 -> 152394 bytes .../pylib/mipylib/numeric/core/numeric.py | 26 --- .../org/meteoinfo/ndarray/math/ArrayMath.java | 4 +- 9 files changed, 298 insertions(+), 50 deletions(-) diff --git a/meteoinfo-dataframe/src/main/java/org/meteoinfo/dataframe/DataFrame.java b/meteoinfo-dataframe/src/main/java/org/meteoinfo/dataframe/DataFrame.java index 701a1756..c4f02d83 100644 --- a/meteoinfo-dataframe/src/main/java/org/meteoinfo/dataframe/DataFrame.java +++ b/meteoinfo-dataframe/src/main/java/org/meteoinfo/dataframe/DataFrame.java @@ -1396,11 +1396,6 @@ public class DataFrame implements Iterable { * @throws org.meteoinfo.ndarray.InvalidRangeException */ public void setValues(int row, Range colRange, Number value) throws InvalidRangeException { - ColumnIndex cols = new ColumnIndex(); - for (int i = colRange.first(); i <= colRange.last(); i += colRange.stride()) { - cols.add((Column) this.columns.get(i).clone()); - } - if (this.array2D) { List ranges = new ArrayList<>(); ranges.add(new Range(row, row, 1)); @@ -1413,6 +1408,186 @@ public class DataFrame implements Iterable { } } + /** + * Set values by row and column ranges + * + * @param rowRange Row range + * @param colRange Column range + * @param value The value + * @throws org.meteoinfo.ndarray.InvalidRangeException + */ + public void setValues(Range rowRange, Range colRange, Number value) throws InvalidRangeException { + if (this.array2D) { + List ranges = new ArrayList<>(); + ranges.add(rowRange); + ranges.add(colRange); + ArrayMath.setSection((Array) this.data, ranges, value); + } else { + for (int j = colRange.first(); j <= colRange.last(); j += colRange.stride()) { + Array array = ((List) this.data).get(j); + for (int i = rowRange.first(); i <= rowRange.last(); i += rowRange.stride()) { + array.setObject(i, value); + } + } + } + } + + /** + * Set values by row and column ranges + * + * @param rowRange Row range + * @param colRange Column range + * @param value The value + * @throws org.meteoinfo.ndarray.InvalidRangeException + */ + public void setValues(List rowRange, Range colRange, Number value) throws InvalidRangeException { + if (this.array2D) { + List ranges = new ArrayList<>(); + ranges.add(rowRange); + ranges.add(colRange); + ArrayMath.setSection_Mix((Array) this.data, ranges, value); + } else { + for (int j = colRange.first(); j <= colRange.last(); j += colRange.stride()) { + Array array = ((List) this.data).get(j); + for (int i : rowRange) { + array.setObject(i, value); + } + } + } + } + + /** + * Set values by row and column ranges + * + * @param rowRange Row range + * @param colRange Column range + * @param value The value + * @throws org.meteoinfo.ndarray.InvalidRangeException + */ + public void setValues(Range rowRange, List colRange, Number value) throws InvalidRangeException { + if (this.array2D) { + List ranges = new ArrayList<>(); + ranges.add(rowRange); + ranges.add(colRange); + ArrayMath.setSection_Mix((Array) this.data, ranges, value); + } else { + for (int j : colRange) { + Array array = ((List) this.data).get(j); + for (int i = rowRange.first(); i <= rowRange.last(); i += rowRange.stride()) { + array.setObject(i, value); + } + } + } + } + + /** + * Set values by row and column ranges + * + * @param rowRange Row range + * @param colRange Column range + * @param value The value + * @throws org.meteoinfo.ndarray.InvalidRangeException + */ + public void setValues(List rowRange, List colRange, Number value) throws InvalidRangeException { + if (this.array2D) { + List ranges = new ArrayList<>(); + ranges.add(rowRange); + ranges.add(colRange); + ArrayMath.setSection_List((Array) this.data, ranges, value); + } else { + for (int j : colRange) { + Array array = ((List) this.data).get(j); + for (int i : rowRange) { + array.setObject(i, value); + } + } + } + } + + /** + * Set values by row and column ranges + * + * @param rowRange Row range + * @param colRange Column range + * @param value The value + * @throws org.meteoinfo.ndarray.InvalidRangeException + */ + public void setValues(List rowRange, Range colRange, Array value) throws InvalidRangeException { + value = value.copyIfView(); + + if (this.array2D) { + List ranges = new ArrayList<>(); + ranges.add(rowRange); + ranges.add(colRange); + ArrayMath.setSection_Mix((Array) this.data, ranges, value); + } else { + int idx = 0; + for (int j = colRange.first(); j <= colRange.last(); j += colRange.stride()) { + Array array = ((List) this.data).get(j); + for (int i : rowRange) { + array.setObject(i, value.getObject(idx)); + idx += 1; + } + } + } + } + + /** + * Set values by row and column ranges + * + * @param rowRange Row range + * @param colRange Column range + * @param value The value + * @throws org.meteoinfo.ndarray.InvalidRangeException + */ + public void setValues(Range rowRange, List colRange, Array value) throws InvalidRangeException { + value = value.copyIfView(); + + if (this.array2D) { + List ranges = new ArrayList<>(); + ranges.add(rowRange); + ranges.add(colRange); + ArrayMath.setSection_Mix((Array) this.data, ranges, value); + } else { + int idx = 0; + for (int j : colRange) { + Array array = ((List) this.data).get(j); + for (int i = rowRange.first(); i <= rowRange.last(); i += rowRange.stride()) { + array.setObject(i, value.getObject(idx)); + idx += 1; + } + } + } + } + + /** + * Set values by row and column ranges + * + * @param rowRange Row range + * @param colRange Column range + * @param value The value + * @throws org.meteoinfo.ndarray.InvalidRangeException + */ + public void setValues(List rowRange, List colRange, Array value) throws InvalidRangeException { + value = value.copyIfView(); + + if (this.array2D) { + List ranges = new ArrayList<>(); + ranges.add(rowRange); + ranges.add(colRange); + ArrayMath.setSection_List((Array) this.data, ranges, value); + } else { + int idx = 0; + for (int j : colRange) { + Array array = ((List) this.data).get(j); + for (int i : rowRange) { + array.setObject(i, value.getObject(idx)); + idx += 1; + } + } + } + } + /** * Set values by row and column ranges * @@ -1422,6 +1597,8 @@ public class DataFrame implements Iterable { * @throws org.meteoinfo.ndarray.InvalidRangeException */ public void setValues(int row, Range colRange, Array value) throws InvalidRangeException { + value = value.copyIfView(); + ColumnIndex cols = new ColumnIndex(); for (int i = colRange.first(); i <= colRange.last(); i += colRange.stride()) { cols.add((Column) this.columns.get(i).clone()); @@ -1441,6 +1618,39 @@ public class DataFrame implements Iterable { } } + /** + * Set values by row and column ranges + * + * @param rowRange Row range + * @param colRange Column range + * @param value The value array + * @throws org.meteoinfo.ndarray.InvalidRangeException + */ + public void setValues(Range rowRange, Range colRange, Array value) throws InvalidRangeException { + value = value.copyIfView(); + + ColumnIndex cols = new ColumnIndex(); + for (int i = colRange.first(); i <= colRange.last(); i += colRange.stride()) { + cols.add((Column) this.columns.get(i).clone()); + } + + if (this.array2D) { + List ranges = new ArrayList<>(); + ranges.add(rowRange); + ranges.add(colRange); + ArrayMath.setSection((Array) this.data, ranges, value); + } else { + int idx = 0; + for (int j = colRange.first(); j <= colRange.last(); j += colRange.stride()) { + Array array = ((List) this.data).get(j); + for (int i = rowRange.first(); i <= rowRange.last(); i += rowRange.stride()) { + array.setObject(i, value.getObject(idx)); + idx += 1; + } + } + } + } + /** * Select by row and column ranges * diff --git a/meteoinfo-lab/milconfig.xml b/meteoinfo-lab/milconfig.xml index 3b1a8e2d..2ba1c901 100644 --- a/meteoinfo-lab/milconfig.xml +++ b/meteoinfo-lab/milconfig.xml @@ -1,7 +1,6 @@ - - + @@ -10,27 +9,28 @@ - + + - - - + + + - - - + + + @@ -38,5 +38,5 @@
- + diff --git a/meteoinfo-lab/pylib/mipylib/dataframe/dataframe$py.class b/meteoinfo-lab/pylib/mipylib/dataframe/dataframe$py.class index 08c6e3fd849cff30b225b7baf6d491b9223a3003..ae3c9513779a9356be378910234d5d35f9799578 100644 GIT binary patch delta 18120 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 literal 18847 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 diff --git a/meteoinfo-lab/pylib/mipylib/dataframe/index.py b/meteoinfo-lab/pylib/mipylib/dataframe/index.py index 5622c021..f0f8a9cf 100644 --- a/meteoinfo-lab/pylib/mipylib/dataframe/index.py +++ b/meteoinfo-lab/pylib/mipylib/dataframe/index.py @@ -14,6 +14,7 @@ import numbers import mipylib.numeric as np import mipylib.miutil as miutil +import series class Index(object): @@ -113,6 +114,9 @@ class Index(object): :returns: int if unique index, slice if monotonic index, else mask. """ + if isinstance(key, series.Series): + key = key.values + if isinstance(key, np.NDArray) and key.dtype == np.dtype.bool: r = self._index.filterIndices(key.asarray()) return list(r) diff --git a/meteoinfo-lab/pylib/mipylib/numeric/core/numeric$py.class b/meteoinfo-lab/pylib/mipylib/numeric/core/numeric$py.class index 781d9fe85943d8bb2ce66573d8f808e511f16f3b..8e9bea17781641c5b97e03b20258d598f8823752 100644 GIT binary patch delta 30164 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 delta 30715 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