maxframe 0.1.0b5__cp38-cp38-macosx_11_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of maxframe might be problematic. Click here for more details.
- maxframe/__init__.py +32 -0
- maxframe/_utils.cpython-38-darwin.so +0 -0
- maxframe/_utils.pxd +33 -0
- maxframe/_utils.pyx +547 -0
- maxframe/codegen.py +528 -0
- maxframe/config/__init__.py +15 -0
- maxframe/config/config.py +443 -0
- maxframe/config/tests/__init__.py +13 -0
- maxframe/config/tests/test_config.py +103 -0
- maxframe/config/tests/test_validators.py +34 -0
- maxframe/config/validators.py +57 -0
- maxframe/conftest.py +139 -0
- maxframe/core/__init__.py +65 -0
- maxframe/core/base.py +156 -0
- maxframe/core/entity/__init__.py +44 -0
- maxframe/core/entity/chunks.py +68 -0
- maxframe/core/entity/core.py +152 -0
- maxframe/core/entity/executable.py +337 -0
- maxframe/core/entity/fuse.py +73 -0
- maxframe/core/entity/objects.py +100 -0
- maxframe/core/entity/output_types.py +90 -0
- maxframe/core/entity/tileables.py +438 -0
- maxframe/core/entity/utils.py +24 -0
- maxframe/core/graph/__init__.py +17 -0
- maxframe/core/graph/builder/__init__.py +16 -0
- maxframe/core/graph/builder/base.py +86 -0
- maxframe/core/graph/builder/chunk.py +430 -0
- maxframe/core/graph/builder/tileable.py +34 -0
- maxframe/core/graph/builder/utils.py +41 -0
- maxframe/core/graph/core.cpython-38-darwin.so +0 -0
- maxframe/core/graph/core.pyx +467 -0
- maxframe/core/graph/entity.py +171 -0
- maxframe/core/graph/tests/__init__.py +13 -0
- maxframe/core/graph/tests/test_graph.py +205 -0
- maxframe/core/mode.py +96 -0
- maxframe/core/operator/__init__.py +34 -0
- maxframe/core/operator/base.py +450 -0
- maxframe/core/operator/core.py +276 -0
- maxframe/core/operator/fetch.py +53 -0
- maxframe/core/operator/fuse.py +29 -0
- maxframe/core/operator/objects.py +72 -0
- maxframe/core/operator/shuffle.py +111 -0
- maxframe/core/operator/tests/__init__.py +13 -0
- maxframe/core/operator/tests/test_core.py +64 -0
- maxframe/core/tests/__init__.py +13 -0
- maxframe/core/tests/test_mode.py +75 -0
- maxframe/dataframe/__init__.py +81 -0
- maxframe/dataframe/arithmetic/__init__.py +359 -0
- maxframe/dataframe/arithmetic/abs.py +33 -0
- maxframe/dataframe/arithmetic/add.py +60 -0
- maxframe/dataframe/arithmetic/arccos.py +28 -0
- maxframe/dataframe/arithmetic/arccosh.py +28 -0
- maxframe/dataframe/arithmetic/arcsin.py +28 -0
- maxframe/dataframe/arithmetic/arcsinh.py +28 -0
- maxframe/dataframe/arithmetic/arctan.py +28 -0
- maxframe/dataframe/arithmetic/arctanh.py +28 -0
- maxframe/dataframe/arithmetic/around.py +152 -0
- maxframe/dataframe/arithmetic/bitwise_and.py +46 -0
- maxframe/dataframe/arithmetic/bitwise_or.py +50 -0
- maxframe/dataframe/arithmetic/bitwise_xor.py +46 -0
- maxframe/dataframe/arithmetic/ceil.py +28 -0
- maxframe/dataframe/arithmetic/core.py +342 -0
- maxframe/dataframe/arithmetic/cos.py +28 -0
- maxframe/dataframe/arithmetic/cosh.py +28 -0
- maxframe/dataframe/arithmetic/degrees.py +28 -0
- maxframe/dataframe/arithmetic/docstring.py +442 -0
- maxframe/dataframe/arithmetic/equal.py +56 -0
- maxframe/dataframe/arithmetic/exp.py +28 -0
- maxframe/dataframe/arithmetic/exp2.py +28 -0
- maxframe/dataframe/arithmetic/expm1.py +28 -0
- maxframe/dataframe/arithmetic/floor.py +28 -0
- maxframe/dataframe/arithmetic/floordiv.py +64 -0
- maxframe/dataframe/arithmetic/greater.py +57 -0
- maxframe/dataframe/arithmetic/greater_equal.py +57 -0
- maxframe/dataframe/arithmetic/invert.py +33 -0
- maxframe/dataframe/arithmetic/is_ufuncs.py +62 -0
- maxframe/dataframe/arithmetic/less.py +57 -0
- maxframe/dataframe/arithmetic/less_equal.py +57 -0
- maxframe/dataframe/arithmetic/log.py +28 -0
- maxframe/dataframe/arithmetic/log10.py +28 -0
- maxframe/dataframe/arithmetic/log2.py +28 -0
- maxframe/dataframe/arithmetic/mod.py +60 -0
- maxframe/dataframe/arithmetic/multiply.py +60 -0
- maxframe/dataframe/arithmetic/negative.py +33 -0
- maxframe/dataframe/arithmetic/not_equal.py +56 -0
- maxframe/dataframe/arithmetic/power.py +68 -0
- maxframe/dataframe/arithmetic/radians.py +28 -0
- maxframe/dataframe/arithmetic/sin.py +28 -0
- maxframe/dataframe/arithmetic/sinh.py +28 -0
- maxframe/dataframe/arithmetic/sqrt.py +28 -0
- maxframe/dataframe/arithmetic/subtract.py +64 -0
- maxframe/dataframe/arithmetic/tan.py +28 -0
- maxframe/dataframe/arithmetic/tanh.py +28 -0
- maxframe/dataframe/arithmetic/tests/__init__.py +13 -0
- maxframe/dataframe/arithmetic/tests/test_arithmetic.py +695 -0
- maxframe/dataframe/arithmetic/truediv.py +64 -0
- maxframe/dataframe/arithmetic/trunc.py +28 -0
- maxframe/dataframe/arrays.py +864 -0
- maxframe/dataframe/core.py +2417 -0
- maxframe/dataframe/datasource/__init__.py +15 -0
- maxframe/dataframe/datasource/core.py +81 -0
- maxframe/dataframe/datasource/dataframe.py +59 -0
- maxframe/dataframe/datasource/date_range.py +504 -0
- maxframe/dataframe/datasource/from_index.py +54 -0
- maxframe/dataframe/datasource/from_records.py +107 -0
- maxframe/dataframe/datasource/from_tensor.py +419 -0
- maxframe/dataframe/datasource/index.py +117 -0
- maxframe/dataframe/datasource/read_csv.py +528 -0
- maxframe/dataframe/datasource/read_odps_query.py +299 -0
- maxframe/dataframe/datasource/read_odps_table.py +253 -0
- maxframe/dataframe/datasource/read_parquet.py +421 -0
- maxframe/dataframe/datasource/series.py +55 -0
- maxframe/dataframe/datasource/tests/__init__.py +13 -0
- maxframe/dataframe/datasource/tests/test_datasource.py +401 -0
- maxframe/dataframe/datastore/__init__.py +26 -0
- maxframe/dataframe/datastore/core.py +19 -0
- maxframe/dataframe/datastore/to_csv.py +227 -0
- maxframe/dataframe/datastore/to_odps.py +162 -0
- maxframe/dataframe/extensions/__init__.py +41 -0
- maxframe/dataframe/extensions/accessor.py +50 -0
- maxframe/dataframe/extensions/reshuffle.py +83 -0
- maxframe/dataframe/extensions/tests/__init__.py +13 -0
- maxframe/dataframe/extensions/tests/test_extensions.py +38 -0
- maxframe/dataframe/fetch/__init__.py +15 -0
- maxframe/dataframe/fetch/core.py +86 -0
- maxframe/dataframe/groupby/__init__.py +82 -0
- maxframe/dataframe/groupby/aggregation.py +350 -0
- maxframe/dataframe/groupby/apply.py +251 -0
- maxframe/dataframe/groupby/core.py +179 -0
- maxframe/dataframe/groupby/cum.py +124 -0
- maxframe/dataframe/groupby/fill.py +141 -0
- maxframe/dataframe/groupby/getitem.py +92 -0
- maxframe/dataframe/groupby/head.py +105 -0
- maxframe/dataframe/groupby/sample.py +214 -0
- maxframe/dataframe/groupby/tests/__init__.py +13 -0
- maxframe/dataframe/groupby/tests/test_groupby.py +374 -0
- maxframe/dataframe/groupby/transform.py +255 -0
- maxframe/dataframe/indexing/__init__.py +84 -0
- maxframe/dataframe/indexing/add_prefix_suffix.py +110 -0
- maxframe/dataframe/indexing/align.py +349 -0
- maxframe/dataframe/indexing/at.py +83 -0
- maxframe/dataframe/indexing/getitem.py +204 -0
- maxframe/dataframe/indexing/iat.py +37 -0
- maxframe/dataframe/indexing/iloc.py +566 -0
- maxframe/dataframe/indexing/insert.py +86 -0
- maxframe/dataframe/indexing/loc.py +411 -0
- maxframe/dataframe/indexing/reindex.py +526 -0
- maxframe/dataframe/indexing/rename.py +462 -0
- maxframe/dataframe/indexing/rename_axis.py +209 -0
- maxframe/dataframe/indexing/reset_index.py +402 -0
- maxframe/dataframe/indexing/sample.py +221 -0
- maxframe/dataframe/indexing/set_axis.py +194 -0
- maxframe/dataframe/indexing/set_index.py +61 -0
- maxframe/dataframe/indexing/setitem.py +130 -0
- maxframe/dataframe/indexing/tests/__init__.py +13 -0
- maxframe/dataframe/indexing/tests/test_indexing.py +488 -0
- maxframe/dataframe/indexing/where.py +308 -0
- maxframe/dataframe/initializer.py +288 -0
- maxframe/dataframe/merge/__init__.py +32 -0
- maxframe/dataframe/merge/append.py +121 -0
- maxframe/dataframe/merge/concat.py +325 -0
- maxframe/dataframe/merge/merge.py +593 -0
- maxframe/dataframe/merge/tests/__init__.py +13 -0
- maxframe/dataframe/merge/tests/test_merge.py +215 -0
- maxframe/dataframe/misc/__init__.py +134 -0
- maxframe/dataframe/misc/_duplicate.py +46 -0
- maxframe/dataframe/misc/accessor.py +276 -0
- maxframe/dataframe/misc/apply.py +692 -0
- maxframe/dataframe/misc/astype.py +236 -0
- maxframe/dataframe/misc/case_when.py +141 -0
- maxframe/dataframe/misc/check_monotonic.py +84 -0
- maxframe/dataframe/misc/cut.py +383 -0
- maxframe/dataframe/misc/datetimes.py +79 -0
- maxframe/dataframe/misc/describe.py +108 -0
- maxframe/dataframe/misc/diff.py +210 -0
- maxframe/dataframe/misc/drop.py +440 -0
- maxframe/dataframe/misc/drop_duplicates.py +248 -0
- maxframe/dataframe/misc/duplicated.py +292 -0
- maxframe/dataframe/misc/eval.py +728 -0
- maxframe/dataframe/misc/explode.py +171 -0
- maxframe/dataframe/misc/get_dummies.py +208 -0
- maxframe/dataframe/misc/isin.py +217 -0
- maxframe/dataframe/misc/map.py +236 -0
- maxframe/dataframe/misc/melt.py +162 -0
- maxframe/dataframe/misc/memory_usage.py +248 -0
- maxframe/dataframe/misc/pct_change.py +150 -0
- maxframe/dataframe/misc/pivot_table.py +262 -0
- maxframe/dataframe/misc/qcut.py +104 -0
- maxframe/dataframe/misc/select_dtypes.py +104 -0
- maxframe/dataframe/misc/shift.py +256 -0
- maxframe/dataframe/misc/stack.py +238 -0
- maxframe/dataframe/misc/string_.py +221 -0
- maxframe/dataframe/misc/tests/__init__.py +13 -0
- maxframe/dataframe/misc/tests/test_misc.py +468 -0
- maxframe/dataframe/misc/to_numeric.py +178 -0
- maxframe/dataframe/misc/transform.py +361 -0
- maxframe/dataframe/misc/transpose.py +136 -0
- maxframe/dataframe/misc/value_counts.py +182 -0
- maxframe/dataframe/missing/__init__.py +53 -0
- maxframe/dataframe/missing/checkna.py +223 -0
- maxframe/dataframe/missing/dropna.py +280 -0
- maxframe/dataframe/missing/fillna.py +275 -0
- maxframe/dataframe/missing/replace.py +439 -0
- maxframe/dataframe/missing/tests/__init__.py +13 -0
- maxframe/dataframe/missing/tests/test_missing.py +89 -0
- maxframe/dataframe/operators.py +273 -0
- maxframe/dataframe/plotting/__init__.py +40 -0
- maxframe/dataframe/plotting/core.py +78 -0
- maxframe/dataframe/plotting/tests/__init__.py +13 -0
- maxframe/dataframe/plotting/tests/test_plotting.py +136 -0
- maxframe/dataframe/reduction/__init__.py +107 -0
- maxframe/dataframe/reduction/aggregation.py +344 -0
- maxframe/dataframe/reduction/all.py +78 -0
- maxframe/dataframe/reduction/any.py +78 -0
- maxframe/dataframe/reduction/core.py +837 -0
- maxframe/dataframe/reduction/count.py +59 -0
- maxframe/dataframe/reduction/cummax.py +30 -0
- maxframe/dataframe/reduction/cummin.py +30 -0
- maxframe/dataframe/reduction/cumprod.py +30 -0
- maxframe/dataframe/reduction/cumsum.py +30 -0
- maxframe/dataframe/reduction/custom_reduction.py +42 -0
- maxframe/dataframe/reduction/kurtosis.py +104 -0
- maxframe/dataframe/reduction/max.py +65 -0
- maxframe/dataframe/reduction/mean.py +61 -0
- maxframe/dataframe/reduction/min.py +65 -0
- maxframe/dataframe/reduction/nunique.py +141 -0
- maxframe/dataframe/reduction/prod.py +76 -0
- maxframe/dataframe/reduction/reduction_size.py +36 -0
- maxframe/dataframe/reduction/sem.py +69 -0
- maxframe/dataframe/reduction/skew.py +89 -0
- maxframe/dataframe/reduction/std.py +53 -0
- maxframe/dataframe/reduction/str_concat.py +48 -0
- maxframe/dataframe/reduction/sum.py +77 -0
- maxframe/dataframe/reduction/tests/__init__.py +13 -0
- maxframe/dataframe/reduction/tests/test_reduction.py +486 -0
- maxframe/dataframe/reduction/unique.py +90 -0
- maxframe/dataframe/reduction/var.py +72 -0
- maxframe/dataframe/sort/__init__.py +34 -0
- maxframe/dataframe/sort/core.py +36 -0
- maxframe/dataframe/sort/sort_index.py +153 -0
- maxframe/dataframe/sort/sort_values.py +311 -0
- maxframe/dataframe/sort/tests/__init__.py +13 -0
- maxframe/dataframe/sort/tests/test_sort.py +81 -0
- maxframe/dataframe/statistics/__init__.py +33 -0
- maxframe/dataframe/statistics/corr.py +280 -0
- maxframe/dataframe/statistics/quantile.py +341 -0
- maxframe/dataframe/statistics/tests/__init__.py +13 -0
- maxframe/dataframe/statistics/tests/test_statistics.py +82 -0
- maxframe/dataframe/tests/__init__.py +13 -0
- maxframe/dataframe/tests/test_initializer.py +29 -0
- maxframe/dataframe/tseries/__init__.py +13 -0
- maxframe/dataframe/tseries/tests/__init__.py +13 -0
- maxframe/dataframe/tseries/tests/test_tseries.py +30 -0
- maxframe/dataframe/tseries/to_datetime.py +297 -0
- maxframe/dataframe/ufunc/__init__.py +27 -0
- maxframe/dataframe/ufunc/tensor.py +54 -0
- maxframe/dataframe/ufunc/ufunc.py +52 -0
- maxframe/dataframe/utils.py +1267 -0
- maxframe/dataframe/window/__init__.py +29 -0
- maxframe/dataframe/window/aggregation.py +96 -0
- maxframe/dataframe/window/core.py +69 -0
- maxframe/dataframe/window/ewm.py +249 -0
- maxframe/dataframe/window/expanding.py +147 -0
- maxframe/dataframe/window/rolling.py +376 -0
- maxframe/dataframe/window/tests/__init__.py +13 -0
- maxframe/dataframe/window/tests/test_ewm.py +70 -0
- maxframe/dataframe/window/tests/test_expanding.py +66 -0
- maxframe/dataframe/window/tests/test_rolling.py +57 -0
- maxframe/env.py +33 -0
- maxframe/errors.py +21 -0
- maxframe/extension.py +81 -0
- maxframe/learn/__init__.py +17 -0
- maxframe/learn/contrib/__init__.py +17 -0
- maxframe/learn/contrib/pytorch/__init__.py +16 -0
- maxframe/learn/contrib/pytorch/run_function.py +110 -0
- maxframe/learn/contrib/pytorch/run_script.py +102 -0
- maxframe/learn/contrib/pytorch/tests/__init__.py +13 -0
- maxframe/learn/contrib/pytorch/tests/test_pytorch.py +42 -0
- maxframe/learn/contrib/utils.py +52 -0
- maxframe/learn/contrib/xgboost/__init__.py +26 -0
- maxframe/learn/contrib/xgboost/classifier.py +86 -0
- maxframe/learn/contrib/xgboost/core.py +156 -0
- maxframe/learn/contrib/xgboost/dmatrix.py +150 -0
- maxframe/learn/contrib/xgboost/predict.py +138 -0
- maxframe/learn/contrib/xgboost/regressor.py +78 -0
- maxframe/learn/contrib/xgboost/tests/__init__.py +13 -0
- maxframe/learn/contrib/xgboost/tests/test_core.py +43 -0
- maxframe/learn/contrib/xgboost/train.py +121 -0
- maxframe/learn/utils/__init__.py +15 -0
- maxframe/learn/utils/core.py +29 -0
- maxframe/lib/__init__.py +15 -0
- maxframe/lib/aio/__init__.py +27 -0
- maxframe/lib/aio/_runners.py +162 -0
- maxframe/lib/aio/_threads.py +35 -0
- maxframe/lib/aio/base.py +82 -0
- maxframe/lib/aio/file.py +85 -0
- maxframe/lib/aio/isolation.py +100 -0
- maxframe/lib/aio/lru.py +242 -0
- maxframe/lib/aio/parallelism.py +37 -0
- maxframe/lib/aio/tests/__init__.py +13 -0
- maxframe/lib/aio/tests/test_aio_file.py +55 -0
- maxframe/lib/compression.py +55 -0
- maxframe/lib/cython/__init__.py +13 -0
- maxframe/lib/cython/libcpp.pxd +30 -0
- maxframe/lib/filesystem/__init__.py +21 -0
- maxframe/lib/filesystem/_glob.py +173 -0
- maxframe/lib/filesystem/_oss_lib/__init__.py +13 -0
- maxframe/lib/filesystem/_oss_lib/common.py +198 -0
- maxframe/lib/filesystem/_oss_lib/glob.py +147 -0
- maxframe/lib/filesystem/_oss_lib/handle.py +156 -0
- maxframe/lib/filesystem/arrow.py +236 -0
- maxframe/lib/filesystem/base.py +263 -0
- maxframe/lib/filesystem/core.py +95 -0
- maxframe/lib/filesystem/fsmap.py +164 -0
- maxframe/lib/filesystem/hdfs.py +31 -0
- maxframe/lib/filesystem/local.py +112 -0
- maxframe/lib/filesystem/oss.py +157 -0
- maxframe/lib/filesystem/tests/__init__.py +13 -0
- maxframe/lib/filesystem/tests/test_filesystem.py +223 -0
- maxframe/lib/filesystem/tests/test_oss.py +182 -0
- maxframe/lib/functools_compat.py +81 -0
- maxframe/lib/mmh3.cpython-38-darwin.so +0 -0
- maxframe/lib/mmh3_src/MurmurHash3.cpp +339 -0
- maxframe/lib/mmh3_src/MurmurHash3.h +43 -0
- maxframe/lib/mmh3_src/mmh3module.cpp +387 -0
- maxframe/lib/sparse/__init__.py +861 -0
- maxframe/lib/sparse/array.py +1604 -0
- maxframe/lib/sparse/core.py +92 -0
- maxframe/lib/sparse/matrix.py +241 -0
- maxframe/lib/sparse/tests/__init__.py +15 -0
- maxframe/lib/sparse/tests/test_sparse.py +476 -0
- maxframe/lib/sparse/vector.py +150 -0
- maxframe/lib/tblib/LICENSE +20 -0
- maxframe/lib/tblib/__init__.py +327 -0
- maxframe/lib/tblib/cpython.py +83 -0
- maxframe/lib/tblib/decorators.py +44 -0
- maxframe/lib/tblib/pickling_support.py +90 -0
- maxframe/lib/tests/__init__.py +13 -0
- maxframe/lib/tests/test_wrapped_pickle.py +51 -0
- maxframe/lib/version.py +620 -0
- maxframe/lib/wrapped_pickle.py +139 -0
- maxframe/mixin.py +100 -0
- maxframe/odpsio/__init__.py +21 -0
- maxframe/odpsio/arrow.py +91 -0
- maxframe/odpsio/schema.py +364 -0
- maxframe/odpsio/tableio.py +322 -0
- maxframe/odpsio/tests/__init__.py +13 -0
- maxframe/odpsio/tests/test_arrow.py +88 -0
- maxframe/odpsio/tests/test_schema.py +297 -0
- maxframe/odpsio/tests/test_tableio.py +136 -0
- maxframe/odpsio/tests/test_volumeio.py +90 -0
- maxframe/odpsio/volumeio.py +95 -0
- maxframe/opcodes.py +590 -0
- maxframe/protocol.py +415 -0
- maxframe/remote/__init__.py +18 -0
- maxframe/remote/core.py +210 -0
- maxframe/remote/run_script.py +121 -0
- maxframe/serialization/__init__.py +26 -0
- maxframe/serialization/arrow.py +95 -0
- maxframe/serialization/core.cpython-38-darwin.so +0 -0
- maxframe/serialization/core.pxd +44 -0
- maxframe/serialization/core.pyi +61 -0
- maxframe/serialization/core.pyx +1094 -0
- maxframe/serialization/exception.py +86 -0
- maxframe/serialization/maxframe_objects.py +39 -0
- maxframe/serialization/numpy.py +91 -0
- maxframe/serialization/pandas.py +202 -0
- maxframe/serialization/scipy.py +71 -0
- maxframe/serialization/serializables/__init__.py +55 -0
- maxframe/serialization/serializables/core.py +262 -0
- maxframe/serialization/serializables/field.py +624 -0
- maxframe/serialization/serializables/field_type.py +589 -0
- maxframe/serialization/serializables/tests/__init__.py +13 -0
- maxframe/serialization/serializables/tests/test_field_type.py +121 -0
- maxframe/serialization/serializables/tests/test_serializable.py +250 -0
- maxframe/serialization/tests/__init__.py +13 -0
- maxframe/serialization/tests/test_serial.py +412 -0
- maxframe/session.py +1310 -0
- maxframe/tensor/__init__.py +183 -0
- maxframe/tensor/arithmetic/__init__.py +315 -0
- maxframe/tensor/arithmetic/abs.py +68 -0
- maxframe/tensor/arithmetic/absolute.py +68 -0
- maxframe/tensor/arithmetic/add.py +82 -0
- maxframe/tensor/arithmetic/angle.py +72 -0
- maxframe/tensor/arithmetic/arccos.py +104 -0
- maxframe/tensor/arithmetic/arccosh.py +91 -0
- maxframe/tensor/arithmetic/arcsin.py +94 -0
- maxframe/tensor/arithmetic/arcsinh.py +86 -0
- maxframe/tensor/arithmetic/arctan.py +106 -0
- maxframe/tensor/arithmetic/arctan2.py +128 -0
- maxframe/tensor/arithmetic/arctanh.py +86 -0
- maxframe/tensor/arithmetic/around.py +114 -0
- maxframe/tensor/arithmetic/bitand.py +95 -0
- maxframe/tensor/arithmetic/bitor.py +102 -0
- maxframe/tensor/arithmetic/bitxor.py +95 -0
- maxframe/tensor/arithmetic/cbrt.py +66 -0
- maxframe/tensor/arithmetic/ceil.py +71 -0
- maxframe/tensor/arithmetic/clip.py +165 -0
- maxframe/tensor/arithmetic/conj.py +74 -0
- maxframe/tensor/arithmetic/copysign.py +78 -0
- maxframe/tensor/arithmetic/core.py +544 -0
- maxframe/tensor/arithmetic/cos.py +85 -0
- maxframe/tensor/arithmetic/cosh.py +72 -0
- maxframe/tensor/arithmetic/deg2rad.py +72 -0
- maxframe/tensor/arithmetic/degrees.py +77 -0
- maxframe/tensor/arithmetic/divide.py +114 -0
- maxframe/tensor/arithmetic/equal.py +76 -0
- maxframe/tensor/arithmetic/exp.py +106 -0
- maxframe/tensor/arithmetic/exp2.py +67 -0
- maxframe/tensor/arithmetic/expm1.py +79 -0
- maxframe/tensor/arithmetic/fabs.py +74 -0
- maxframe/tensor/arithmetic/fix.py +69 -0
- maxframe/tensor/arithmetic/float_power.py +103 -0
- maxframe/tensor/arithmetic/floor.py +77 -0
- maxframe/tensor/arithmetic/floordiv.py +94 -0
- maxframe/tensor/arithmetic/fmax.py +105 -0
- maxframe/tensor/arithmetic/fmin.py +106 -0
- maxframe/tensor/arithmetic/fmod.py +99 -0
- maxframe/tensor/arithmetic/frexp.py +92 -0
- maxframe/tensor/arithmetic/greater.py +77 -0
- maxframe/tensor/arithmetic/greater_equal.py +69 -0
- maxframe/tensor/arithmetic/hypot.py +77 -0
- maxframe/tensor/arithmetic/i0.py +89 -0
- maxframe/tensor/arithmetic/imag.py +67 -0
- maxframe/tensor/arithmetic/invert.py +110 -0
- maxframe/tensor/arithmetic/isclose.py +115 -0
- maxframe/tensor/arithmetic/iscomplex.py +64 -0
- maxframe/tensor/arithmetic/isfinite.py +106 -0
- maxframe/tensor/arithmetic/isinf.py +103 -0
- maxframe/tensor/arithmetic/isnan.py +82 -0
- maxframe/tensor/arithmetic/isreal.py +63 -0
- maxframe/tensor/arithmetic/ldexp.py +99 -0
- maxframe/tensor/arithmetic/less.py +69 -0
- maxframe/tensor/arithmetic/less_equal.py +69 -0
- maxframe/tensor/arithmetic/log.py +92 -0
- maxframe/tensor/arithmetic/log10.py +85 -0
- maxframe/tensor/arithmetic/log1p.py +95 -0
- maxframe/tensor/arithmetic/log2.py +85 -0
- maxframe/tensor/arithmetic/logaddexp.py +80 -0
- maxframe/tensor/arithmetic/logaddexp2.py +78 -0
- maxframe/tensor/arithmetic/logical_and.py +81 -0
- maxframe/tensor/arithmetic/logical_not.py +74 -0
- maxframe/tensor/arithmetic/logical_or.py +82 -0
- maxframe/tensor/arithmetic/logical_xor.py +88 -0
- maxframe/tensor/arithmetic/lshift.py +82 -0
- maxframe/tensor/arithmetic/maximum.py +108 -0
- maxframe/tensor/arithmetic/minimum.py +108 -0
- maxframe/tensor/arithmetic/mod.py +104 -0
- maxframe/tensor/arithmetic/modf.py +83 -0
- maxframe/tensor/arithmetic/multiply.py +81 -0
- maxframe/tensor/arithmetic/nan_to_num.py +99 -0
- maxframe/tensor/arithmetic/negative.py +65 -0
- maxframe/tensor/arithmetic/nextafter.py +68 -0
- maxframe/tensor/arithmetic/not_equal.py +72 -0
- maxframe/tensor/arithmetic/positive.py +47 -0
- maxframe/tensor/arithmetic/power.py +106 -0
- maxframe/tensor/arithmetic/rad2deg.py +71 -0
- maxframe/tensor/arithmetic/radians.py +77 -0
- maxframe/tensor/arithmetic/real.py +70 -0
- maxframe/tensor/arithmetic/reciprocal.py +76 -0
- maxframe/tensor/arithmetic/rint.py +68 -0
- maxframe/tensor/arithmetic/rshift.py +81 -0
- maxframe/tensor/arithmetic/setimag.py +29 -0
- maxframe/tensor/arithmetic/setreal.py +29 -0
- maxframe/tensor/arithmetic/sign.py +81 -0
- maxframe/tensor/arithmetic/signbit.py +65 -0
- maxframe/tensor/arithmetic/sin.py +98 -0
- maxframe/tensor/arithmetic/sinc.py +102 -0
- maxframe/tensor/arithmetic/sinh.py +93 -0
- maxframe/tensor/arithmetic/spacing.py +72 -0
- maxframe/tensor/arithmetic/sqrt.py +81 -0
- maxframe/tensor/arithmetic/square.py +69 -0
- maxframe/tensor/arithmetic/subtract.py +81 -0
- maxframe/tensor/arithmetic/tan.py +88 -0
- maxframe/tensor/arithmetic/tanh.py +92 -0
- maxframe/tensor/arithmetic/tests/__init__.py +15 -0
- maxframe/tensor/arithmetic/tests/test_arithmetic.py +414 -0
- maxframe/tensor/arithmetic/truediv.py +104 -0
- maxframe/tensor/arithmetic/trunc.py +72 -0
- maxframe/tensor/arithmetic/utils.py +65 -0
- maxframe/tensor/array_utils.py +186 -0
- maxframe/tensor/base/__init__.py +34 -0
- maxframe/tensor/base/astype.py +119 -0
- maxframe/tensor/base/atleast_1d.py +74 -0
- maxframe/tensor/base/broadcast_to.py +89 -0
- maxframe/tensor/base/ravel.py +92 -0
- maxframe/tensor/base/tests/__init__.py +13 -0
- maxframe/tensor/base/tests/test_base.py +114 -0
- maxframe/tensor/base/transpose.py +125 -0
- maxframe/tensor/base/unique.py +205 -0
- maxframe/tensor/base/where.py +127 -0
- maxframe/tensor/core.py +724 -0
- maxframe/tensor/datasource/__init__.py +32 -0
- maxframe/tensor/datasource/arange.py +156 -0
- maxframe/tensor/datasource/array.py +415 -0
- maxframe/tensor/datasource/core.py +109 -0
- maxframe/tensor/datasource/empty.py +169 -0
- maxframe/tensor/datasource/from_dataframe.py +70 -0
- maxframe/tensor/datasource/from_dense.py +54 -0
- maxframe/tensor/datasource/from_sparse.py +47 -0
- maxframe/tensor/datasource/full.py +186 -0
- maxframe/tensor/datasource/ones.py +173 -0
- maxframe/tensor/datasource/scalar.py +40 -0
- maxframe/tensor/datasource/tests/__init__.py +13 -0
- maxframe/tensor/datasource/tests/test_datasource.py +278 -0
- maxframe/tensor/datasource/zeros.py +188 -0
- maxframe/tensor/fetch/__init__.py +15 -0
- maxframe/tensor/fetch/core.py +54 -0
- maxframe/tensor/indexing/__init__.py +47 -0
- maxframe/tensor/indexing/choose.py +196 -0
- maxframe/tensor/indexing/compress.py +124 -0
- maxframe/tensor/indexing/core.py +190 -0
- maxframe/tensor/indexing/extract.py +71 -0
- maxframe/tensor/indexing/fill_diagonal.py +183 -0
- maxframe/tensor/indexing/flatnonzero.py +60 -0
- maxframe/tensor/indexing/getitem.py +175 -0
- maxframe/tensor/indexing/nonzero.py +120 -0
- maxframe/tensor/indexing/setitem.py +132 -0
- maxframe/tensor/indexing/slice.py +29 -0
- maxframe/tensor/indexing/take.py +130 -0
- maxframe/tensor/indexing/tests/__init__.py +15 -0
- maxframe/tensor/indexing/tests/test_indexing.py +234 -0
- maxframe/tensor/indexing/unravel_index.py +103 -0
- maxframe/tensor/merge/__init__.py +15 -0
- maxframe/tensor/merge/stack.py +132 -0
- maxframe/tensor/merge/tests/__init__.py +13 -0
- maxframe/tensor/merge/tests/test_merge.py +52 -0
- maxframe/tensor/operators.py +123 -0
- maxframe/tensor/random/__init__.py +168 -0
- maxframe/tensor/random/beta.py +87 -0
- maxframe/tensor/random/binomial.py +137 -0
- maxframe/tensor/random/bytes.py +39 -0
- maxframe/tensor/random/chisquare.py +110 -0
- maxframe/tensor/random/choice.py +186 -0
- maxframe/tensor/random/core.py +234 -0
- maxframe/tensor/random/dirichlet.py +123 -0
- maxframe/tensor/random/exponential.py +94 -0
- maxframe/tensor/random/f.py +135 -0
- maxframe/tensor/random/gamma.py +128 -0
- maxframe/tensor/random/geometric.py +93 -0
- maxframe/tensor/random/gumbel.py +167 -0
- maxframe/tensor/random/hypergeometric.py +148 -0
- maxframe/tensor/random/laplace.py +133 -0
- maxframe/tensor/random/logistic.py +129 -0
- maxframe/tensor/random/lognormal.py +159 -0
- maxframe/tensor/random/logseries.py +122 -0
- maxframe/tensor/random/multinomial.py +133 -0
- maxframe/tensor/random/multivariate_normal.py +192 -0
- maxframe/tensor/random/negative_binomial.py +125 -0
- maxframe/tensor/random/noncentral_chisquare.py +132 -0
- maxframe/tensor/random/noncentral_f.py +126 -0
- maxframe/tensor/random/normal.py +143 -0
- maxframe/tensor/random/pareto.py +140 -0
- maxframe/tensor/random/permutation.py +104 -0
- maxframe/tensor/random/poisson.py +111 -0
- maxframe/tensor/random/power.py +142 -0
- maxframe/tensor/random/rand.py +82 -0
- maxframe/tensor/random/randint.py +121 -0
- maxframe/tensor/random/randn.py +96 -0
- maxframe/tensor/random/random_integers.py +123 -0
- maxframe/tensor/random/random_sample.py +86 -0
- maxframe/tensor/random/rayleigh.py +110 -0
- maxframe/tensor/random/shuffle.py +61 -0
- maxframe/tensor/random/standard_cauchy.py +105 -0
- maxframe/tensor/random/standard_exponential.py +72 -0
- maxframe/tensor/random/standard_gamma.py +120 -0
- maxframe/tensor/random/standard_normal.py +74 -0
- maxframe/tensor/random/standard_t.py +135 -0
- maxframe/tensor/random/tests/__init__.py +15 -0
- maxframe/tensor/random/tests/test_random.py +167 -0
- maxframe/tensor/random/triangular.py +119 -0
- maxframe/tensor/random/uniform.py +131 -0
- maxframe/tensor/random/vonmises.py +131 -0
- maxframe/tensor/random/wald.py +114 -0
- maxframe/tensor/random/weibull.py +140 -0
- maxframe/tensor/random/zipf.py +122 -0
- maxframe/tensor/rechunk/__init__.py +26 -0
- maxframe/tensor/rechunk/rechunk.py +43 -0
- maxframe/tensor/reduction/__init__.py +66 -0
- maxframe/tensor/reduction/all.py +103 -0
- maxframe/tensor/reduction/allclose.py +88 -0
- maxframe/tensor/reduction/any.py +105 -0
- maxframe/tensor/reduction/argmax.py +103 -0
- maxframe/tensor/reduction/argmin.py +103 -0
- maxframe/tensor/reduction/array_equal.py +64 -0
- maxframe/tensor/reduction/core.py +168 -0
- maxframe/tensor/reduction/count_nonzero.py +81 -0
- maxframe/tensor/reduction/cumprod.py +97 -0
- maxframe/tensor/reduction/cumsum.py +101 -0
- maxframe/tensor/reduction/max.py +120 -0
- maxframe/tensor/reduction/mean.py +123 -0
- maxframe/tensor/reduction/min.py +120 -0
- maxframe/tensor/reduction/nanargmax.py +82 -0
- maxframe/tensor/reduction/nanargmin.py +76 -0
- maxframe/tensor/reduction/nancumprod.py +91 -0
- maxframe/tensor/reduction/nancumsum.py +94 -0
- maxframe/tensor/reduction/nanmax.py +111 -0
- maxframe/tensor/reduction/nanmean.py +106 -0
- maxframe/tensor/reduction/nanmin.py +111 -0
- maxframe/tensor/reduction/nanprod.py +94 -0
- maxframe/tensor/reduction/nanstd.py +126 -0
- maxframe/tensor/reduction/nansum.py +115 -0
- maxframe/tensor/reduction/nanvar.py +149 -0
- maxframe/tensor/reduction/prod.py +130 -0
- maxframe/tensor/reduction/std.py +134 -0
- maxframe/tensor/reduction/sum.py +125 -0
- maxframe/tensor/reduction/tests/__init__.py +13 -0
- maxframe/tensor/reduction/tests/test_reduction.py +181 -0
- maxframe/tensor/reduction/var.py +176 -0
- maxframe/tensor/reshape/__init__.py +17 -0
- maxframe/tensor/reshape/reshape.py +188 -0
- maxframe/tensor/reshape/tests/__init__.py +15 -0
- maxframe/tensor/reshape/tests/test_reshape.py +37 -0
- maxframe/tensor/statistics/__init__.py +13 -0
- maxframe/tensor/statistics/percentile.py +175 -0
- maxframe/tensor/statistics/quantile.py +288 -0
- maxframe/tensor/ufunc/__init__.py +26 -0
- maxframe/tensor/ufunc/ufunc.py +200 -0
- maxframe/tensor/utils.py +718 -0
- maxframe/tests/__init__.py +13 -0
- maxframe/tests/test_codegen.py +69 -0
- maxframe/tests/test_protocol.py +144 -0
- maxframe/tests/test_utils.py +376 -0
- maxframe/tests/utils.py +164 -0
- maxframe/typing_.py +37 -0
- maxframe/udf.py +134 -0
- maxframe/utils.py +1114 -0
- maxframe-0.1.0b5.dist-info/METADATA +104 -0
- maxframe-0.1.0b5.dist-info/RECORD +647 -0
- maxframe-0.1.0b5.dist-info/WHEEL +5 -0
- maxframe-0.1.0b5.dist-info/top_level.txt +2 -0
- maxframe_client/__init__.py +17 -0
- maxframe_client/clients/__init__.py +13 -0
- maxframe_client/clients/framedriver.py +118 -0
- maxframe_client/clients/spe.py +104 -0
- maxframe_client/conftest.py +15 -0
- maxframe_client/fetcher.py +264 -0
- maxframe_client/session/__init__.py +22 -0
- maxframe_client/session/consts.py +36 -0
- maxframe_client/session/graph.py +119 -0
- maxframe_client/session/odps.py +482 -0
- maxframe_client/session/task.py +280 -0
- maxframe_client/session/tests/__init__.py +13 -0
- maxframe_client/session/tests/test_task.py +85 -0
- maxframe_client/tests/__init__.py +13 -0
- maxframe_client/tests/test_fetcher.py +89 -0
- maxframe_client/tests/test_session.py +255 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from ..utils import validate_axis
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def pct_change(
|
|
19
|
+
df_or_series, periods=1, fill_method="pad", limit=None, freq=None, **kwargs
|
|
20
|
+
):
|
|
21
|
+
"""
|
|
22
|
+
Percentage change between the current and a prior element.
|
|
23
|
+
|
|
24
|
+
Computes the percentage change from the immediately previous row by
|
|
25
|
+
default. This is useful in comparing the percentage of change in a time
|
|
26
|
+
series of elements.
|
|
27
|
+
|
|
28
|
+
Parameters
|
|
29
|
+
----------
|
|
30
|
+
periods : int, default 1
|
|
31
|
+
Periods to shift for forming percent change.
|
|
32
|
+
fill_method : str, default 'pad'
|
|
33
|
+
How to handle NAs before computing percent changes.
|
|
34
|
+
limit : int, default None
|
|
35
|
+
The number of consecutive NAs to fill before stopping.
|
|
36
|
+
freq : DateOffset, timedelta, or str, optional
|
|
37
|
+
Increment to use from time series API (e.g. 'M' or BDay()).
|
|
38
|
+
**kwargs
|
|
39
|
+
Additional keyword arguments are passed into
|
|
40
|
+
`DataFrame.shift` or `Series.shift`.
|
|
41
|
+
|
|
42
|
+
Returns
|
|
43
|
+
-------
|
|
44
|
+
chg : Series or DataFrame
|
|
45
|
+
The same type as the calling object.
|
|
46
|
+
|
|
47
|
+
See Also
|
|
48
|
+
--------
|
|
49
|
+
Series.diff : Compute the difference of two elements in a Series.
|
|
50
|
+
DataFrame.diff : Compute the difference of two elements in a DataFrame.
|
|
51
|
+
Series.shift : Shift the index by some number of periods.
|
|
52
|
+
DataFrame.shift : Shift the index by some number of periods.
|
|
53
|
+
|
|
54
|
+
Examples
|
|
55
|
+
--------
|
|
56
|
+
**Series**
|
|
57
|
+
|
|
58
|
+
>>> import maxframe.dataframe as md
|
|
59
|
+
|
|
60
|
+
>>> s = md.Series([90, 91, 85])
|
|
61
|
+
>>> s.execute()
|
|
62
|
+
0 90
|
|
63
|
+
1 91
|
|
64
|
+
2 85
|
|
65
|
+
dtype: int64
|
|
66
|
+
|
|
67
|
+
>>> s.pct_change().execute()
|
|
68
|
+
0 NaN
|
|
69
|
+
1 0.011111
|
|
70
|
+
2 -0.065934
|
|
71
|
+
dtype: float64
|
|
72
|
+
|
|
73
|
+
>>> s.pct_change(periods=2).execute()
|
|
74
|
+
0 NaN
|
|
75
|
+
1 NaN
|
|
76
|
+
2 -0.055556
|
|
77
|
+
dtype: float64
|
|
78
|
+
|
|
79
|
+
See the percentage change in a Series where filling NAs with last
|
|
80
|
+
valid observation forward to next valid.
|
|
81
|
+
|
|
82
|
+
>>> s = md.Series([90, 91, None, 85])
|
|
83
|
+
>>> s.execute()
|
|
84
|
+
0 90.0
|
|
85
|
+
1 91.0
|
|
86
|
+
2 NaN
|
|
87
|
+
3 85.0
|
|
88
|
+
dtype: float64
|
|
89
|
+
|
|
90
|
+
>>> s.pct_change(fill_method='ffill').execute()
|
|
91
|
+
0 NaN
|
|
92
|
+
1 0.011111
|
|
93
|
+
2 0.000000
|
|
94
|
+
3 -0.065934
|
|
95
|
+
dtype: float64
|
|
96
|
+
|
|
97
|
+
**DataFrame**
|
|
98
|
+
|
|
99
|
+
Percentage change in French franc, Deutsche Mark, and Italian lira from
|
|
100
|
+
1980-01-01 to 1980-03-01.
|
|
101
|
+
|
|
102
|
+
>>> df = md.DataFrame({
|
|
103
|
+
... 'FR': [4.0405, 4.0963, 4.3149],
|
|
104
|
+
... 'GR': [1.7246, 1.7482, 1.8519],
|
|
105
|
+
... 'IT': [804.74, 810.01, 860.13]},
|
|
106
|
+
... index=['1980-01-01', '1980-02-01', '1980-03-01'])
|
|
107
|
+
>>> df.execute()
|
|
108
|
+
FR GR IT
|
|
109
|
+
1980-01-01 4.0405 1.7246 804.74
|
|
110
|
+
1980-02-01 4.0963 1.7482 810.01
|
|
111
|
+
1980-03-01 4.3149 1.8519 860.13
|
|
112
|
+
|
|
113
|
+
>>> df.pct_change().execute()
|
|
114
|
+
FR GR IT
|
|
115
|
+
1980-01-01 NaN NaN NaN
|
|
116
|
+
1980-02-01 0.013810 0.013684 0.006549
|
|
117
|
+
1980-03-01 0.053365 0.059318 0.061876
|
|
118
|
+
|
|
119
|
+
Percentage of change in GOOG and APPL stock volume. Shows computing
|
|
120
|
+
the percentage change between columns.
|
|
121
|
+
|
|
122
|
+
>>> df = md.DataFrame({
|
|
123
|
+
... '2016': [1769950, 30586265],
|
|
124
|
+
... '2015': [1500923, 40912316],
|
|
125
|
+
... '2014': [1371819, 41403351]},
|
|
126
|
+
... index=['GOOG', 'APPL'])
|
|
127
|
+
>>> df.execute()
|
|
128
|
+
2016 2015 2014
|
|
129
|
+
GOOG 1769950 1500923 1371819
|
|
130
|
+
APPL 30586265 40912316 41403351
|
|
131
|
+
|
|
132
|
+
>>> df.pct_change(axis='columns').execute()
|
|
133
|
+
2016 2015 2014
|
|
134
|
+
GOOG NaN -0.151997 -0.086016
|
|
135
|
+
APPL NaN 0.337604 0.012002
|
|
136
|
+
"""
|
|
137
|
+
|
|
138
|
+
axis = validate_axis(kwargs.pop("axis", 0))
|
|
139
|
+
if fill_method is None:
|
|
140
|
+
data = df_or_series
|
|
141
|
+
else:
|
|
142
|
+
data = df_or_series.fillna(method=fill_method, axis=axis, limit=limit)
|
|
143
|
+
|
|
144
|
+
rs = data.div(data.shift(periods=periods, freq=freq, axis=axis, **kwargs)) - 1
|
|
145
|
+
if freq is not None:
|
|
146
|
+
# Shift method is implemented differently when freq is not None
|
|
147
|
+
# We want to restore the original index
|
|
148
|
+
rs = rs.loc[~rs.index.duplicated()]
|
|
149
|
+
rs = rs.reindex_like(data)
|
|
150
|
+
return rs
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import numpy as np
|
|
16
|
+
import pandas as pd
|
|
17
|
+
from pandas.api.types import is_list_like
|
|
18
|
+
|
|
19
|
+
from ... import opcodes
|
|
20
|
+
from ...core import OutputType
|
|
21
|
+
from ...serialization.serializables import AnyField, BoolField, StringField
|
|
22
|
+
from ...utils import no_default
|
|
23
|
+
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
24
|
+
from ..utils import build_df, parse_index
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class DataFramePivotTable(DataFrameOperator, DataFrameOperatorMixin):
|
|
28
|
+
_op_type_ = opcodes.PIVOT_TABLE
|
|
29
|
+
|
|
30
|
+
values = AnyField("values", default=None)
|
|
31
|
+
index = AnyField("index", default=None)
|
|
32
|
+
columns = AnyField("columns", default=None)
|
|
33
|
+
aggfunc = AnyField("aggfunc", default="mean")
|
|
34
|
+
fill_value = AnyField("fill_value", default=None)
|
|
35
|
+
margins = BoolField("margins", default=False)
|
|
36
|
+
dropna = BoolField("dropna", default=True)
|
|
37
|
+
margins_name = StringField("margins_name", default=None)
|
|
38
|
+
sort = BoolField("sort", default=False)
|
|
39
|
+
|
|
40
|
+
def __init__(self, **kw):
|
|
41
|
+
super().__init__(**kw)
|
|
42
|
+
self.output_types = [OutputType.dataframe]
|
|
43
|
+
|
|
44
|
+
def __call__(self, df):
|
|
45
|
+
index_value = columns_value = dtypes = None
|
|
46
|
+
if self.index is not None:
|
|
47
|
+
# index is now a required field
|
|
48
|
+
if len(self.index) == 1:
|
|
49
|
+
index_data = pd.Index(
|
|
50
|
+
[], dtype=df.dtypes[self.index[0]], name=self.index[0]
|
|
51
|
+
)
|
|
52
|
+
else:
|
|
53
|
+
index_data = pd.MultiIndex.from_frame(build_df(df[self.index]))
|
|
54
|
+
index_value = parse_index(index_data)
|
|
55
|
+
|
|
56
|
+
if self.columns is None: # output columns can be determined
|
|
57
|
+
sel_df = df
|
|
58
|
+
groupby_obj = sel_df.groupby(self.index)
|
|
59
|
+
if self.values:
|
|
60
|
+
groupby_obj = groupby_obj[self.values]
|
|
61
|
+
aggregated_df = groupby_obj.agg(self.aggfunc)
|
|
62
|
+
index_value = aggregated_df.index_value
|
|
63
|
+
columns_value = aggregated_df.columns_value
|
|
64
|
+
dtypes = aggregated_df.dtypes
|
|
65
|
+
else:
|
|
66
|
+
columns_value = dtypes = None
|
|
67
|
+
return self.new_dataframe(
|
|
68
|
+
[df],
|
|
69
|
+
shape=(np.nan, np.nan),
|
|
70
|
+
dtypes=dtypes,
|
|
71
|
+
columns_value=columns_value,
|
|
72
|
+
index_value=index_value,
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def pivot_table(
|
|
77
|
+
data,
|
|
78
|
+
values=None,
|
|
79
|
+
index=None,
|
|
80
|
+
columns=None,
|
|
81
|
+
aggfunc="mean",
|
|
82
|
+
fill_value=None,
|
|
83
|
+
margins=False,
|
|
84
|
+
dropna=True,
|
|
85
|
+
margins_name="All",
|
|
86
|
+
sort=True,
|
|
87
|
+
):
|
|
88
|
+
"""
|
|
89
|
+
Create a spreadsheet-style pivot table as a DataFrame.
|
|
90
|
+
|
|
91
|
+
The levels in the pivot table will be stored in MultiIndex objects
|
|
92
|
+
(hierarchical indexes) on the index and columns of the result DataFrame.
|
|
93
|
+
|
|
94
|
+
Parameters
|
|
95
|
+
----------
|
|
96
|
+
values : column to aggregate, optional
|
|
97
|
+
index : column, Grouper, array, or list of the previous
|
|
98
|
+
If an array is passed, it must be the same length as the data. The
|
|
99
|
+
list can contain any of the other types (except list).
|
|
100
|
+
Keys to group by on the pivot table index. If an array is passed,
|
|
101
|
+
it is being used as the same manner as column values.
|
|
102
|
+
columns : column, Grouper, array, or list of the previous
|
|
103
|
+
If an array is passed, it must be the same length as the data. The
|
|
104
|
+
list can contain any of the other types (except list).
|
|
105
|
+
Keys to group by on the pivot table column. If an array is passed,
|
|
106
|
+
it is being used as the same manner as column values.
|
|
107
|
+
aggfunc : function, list of functions, dict, default numpy.mean
|
|
108
|
+
If list of functions passed, the resulting pivot table will have
|
|
109
|
+
hierarchical columns whose top level are the function names
|
|
110
|
+
(inferred from the function objects themselves)
|
|
111
|
+
If dict is passed, the key is column to aggregate and value
|
|
112
|
+
is function or list of functions.
|
|
113
|
+
fill_value : scalar, default None
|
|
114
|
+
Value to replace missing values with (in the resulting pivot table,
|
|
115
|
+
after aggregation).
|
|
116
|
+
margins : bool, default False
|
|
117
|
+
Add all row / columns (e.g. for subtotal / grand totals).
|
|
118
|
+
dropna : bool, default True
|
|
119
|
+
Do not include columns whose entries are all NaN.
|
|
120
|
+
margins_name : str, default 'All'
|
|
121
|
+
Name of the row / column that will contain the totals
|
|
122
|
+
when margins is True.
|
|
123
|
+
sort : bool, default True
|
|
124
|
+
Specifies if the result should be sorted.
|
|
125
|
+
|
|
126
|
+
Returns
|
|
127
|
+
-------
|
|
128
|
+
DataFrame
|
|
129
|
+
An Excel style pivot table.
|
|
130
|
+
|
|
131
|
+
See Also
|
|
132
|
+
--------
|
|
133
|
+
DataFrame.pivot : Pivot without aggregation that can handle
|
|
134
|
+
non-numeric data.
|
|
135
|
+
DataFrame.melt: Unpivot a DataFrame from wide to long format,
|
|
136
|
+
optionally leaving identifiers set.
|
|
137
|
+
wide_to_long : Wide panel to long format. Less flexible but more
|
|
138
|
+
user-friendly than melt.
|
|
139
|
+
|
|
140
|
+
Examples
|
|
141
|
+
--------
|
|
142
|
+
>>> import numpy as np
|
|
143
|
+
>>> import maxframe.dataframe as md
|
|
144
|
+
>>> df = md.DataFrame({"A": ["foo", "foo", "foo", "foo", "foo",
|
|
145
|
+
... "bar", "bar", "bar", "bar"],
|
|
146
|
+
... "B": ["one", "one", "one", "two", "two",
|
|
147
|
+
... "one", "one", "two", "two"],
|
|
148
|
+
... "C": ["small", "large", "large", "small",
|
|
149
|
+
... "small", "large", "small", "small",
|
|
150
|
+
... "large"],
|
|
151
|
+
... "D": [1, 2, 2, 3, 3, 4, 5, 6, 7],
|
|
152
|
+
... "E": [2, 4, 5, 5, 6, 6, 8, 9, 9]})
|
|
153
|
+
>>> df.execute()
|
|
154
|
+
A B C D E
|
|
155
|
+
0 foo one small 1 2
|
|
156
|
+
1 foo one large 2 4
|
|
157
|
+
2 foo one large 2 5
|
|
158
|
+
3 foo two small 3 5
|
|
159
|
+
4 foo two small 3 6
|
|
160
|
+
5 bar one large 4 6
|
|
161
|
+
6 bar one small 5 8
|
|
162
|
+
7 bar two small 6 9
|
|
163
|
+
8 bar two large 7 9
|
|
164
|
+
|
|
165
|
+
This first example aggregates values by taking the sum.
|
|
166
|
+
|
|
167
|
+
>>> table = md.pivot_table(df, values='D', index=['A', 'B'],
|
|
168
|
+
... columns=['C'], aggfunc=np.sum)
|
|
169
|
+
>>> table.execute()
|
|
170
|
+
C large small
|
|
171
|
+
A B
|
|
172
|
+
bar one 4.0 5.0
|
|
173
|
+
two 7.0 6.0
|
|
174
|
+
foo one 4.0 1.0
|
|
175
|
+
two NaN 6.0
|
|
176
|
+
|
|
177
|
+
We can also fill missing values using the `fill_value` parameter.
|
|
178
|
+
|
|
179
|
+
>>> table = md.pivot_table(df, values='D', index=['A', 'B'],
|
|
180
|
+
... columns=['C'], aggfunc=np.sum, fill_value=0)
|
|
181
|
+
>>> table.execute()
|
|
182
|
+
C large small
|
|
183
|
+
A B
|
|
184
|
+
bar one 4 5
|
|
185
|
+
two 7 6
|
|
186
|
+
foo one 4 1
|
|
187
|
+
two 0 6
|
|
188
|
+
|
|
189
|
+
The next example aggregates by taking the mean across multiple columns.
|
|
190
|
+
|
|
191
|
+
>>> table = md.pivot_table(df, values=['D', 'E'], index=['A', 'C'],
|
|
192
|
+
... aggfunc={'D': np.mean,
|
|
193
|
+
... 'E': np.mean})
|
|
194
|
+
>>> table.execute()
|
|
195
|
+
D E
|
|
196
|
+
A C
|
|
197
|
+
bar large 5.500000 7.500000
|
|
198
|
+
small 5.500000 8.500000
|
|
199
|
+
foo large 2.000000 4.500000
|
|
200
|
+
small 2.333333 4.333333
|
|
201
|
+
|
|
202
|
+
We can also calculate multiple types of aggregations for any given
|
|
203
|
+
value column.
|
|
204
|
+
|
|
205
|
+
>>> table = md.pivot_table(df, values=['D', 'E'], index=['A', 'C'],
|
|
206
|
+
... aggfunc={'D': np.mean,
|
|
207
|
+
... 'E': [min, max, np.mean]})
|
|
208
|
+
>>> table.execute()
|
|
209
|
+
D E
|
|
210
|
+
mean max mean min
|
|
211
|
+
A C
|
|
212
|
+
bar large 5.500000 9.0 7.500000 6.0
|
|
213
|
+
small 5.500000 9.0 8.500000 8.0
|
|
214
|
+
foo large 2.000000 5.0 4.500000 4.0
|
|
215
|
+
small 2.333333 6.0 4.333333 2.0
|
|
216
|
+
"""
|
|
217
|
+
if index is None and columns is None:
|
|
218
|
+
raise ValueError(
|
|
219
|
+
"No group keys passed, need to specify at least one of index or columns"
|
|
220
|
+
)
|
|
221
|
+
|
|
222
|
+
def make_col_list(col):
|
|
223
|
+
try:
|
|
224
|
+
if col in data.dtypes.index:
|
|
225
|
+
return [col]
|
|
226
|
+
except TypeError:
|
|
227
|
+
return col
|
|
228
|
+
return col
|
|
229
|
+
|
|
230
|
+
values_list = make_col_list(values)
|
|
231
|
+
index_list = make_col_list(index)
|
|
232
|
+
columns_list = make_col_list(columns)
|
|
233
|
+
|
|
234
|
+
name_to_attr = {"values": values_list, "index": index_list, "columns": columns_list}
|
|
235
|
+
for key, val in name_to_attr.items():
|
|
236
|
+
if val is None:
|
|
237
|
+
continue
|
|
238
|
+
if not is_list_like(val):
|
|
239
|
+
raise ValueError(f"Need to specify {key} as a list-like object.")
|
|
240
|
+
non_exist_key = next((c for c in val if c not in data.dtypes.index), no_default)
|
|
241
|
+
if non_exist_key is not no_default:
|
|
242
|
+
raise ValueError(
|
|
243
|
+
f"Column {non_exist_key} specified in {key} is not a valid column."
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
if columns is None and not margins:
|
|
247
|
+
if values_list:
|
|
248
|
+
data = data[index_list + values_list]
|
|
249
|
+
return data.groupby(index, sort=sort).agg(aggfunc)
|
|
250
|
+
|
|
251
|
+
op = DataFramePivotTable(
|
|
252
|
+
values=values,
|
|
253
|
+
index=index,
|
|
254
|
+
columns=columns,
|
|
255
|
+
aggfunc=aggfunc,
|
|
256
|
+
fill_value=fill_value,
|
|
257
|
+
margins=margins,
|
|
258
|
+
dropna=dropna,
|
|
259
|
+
margins_name=margins_name,
|
|
260
|
+
sort=sort,
|
|
261
|
+
)
|
|
262
|
+
return op(data)
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import numpy as np
|
|
16
|
+
import pandas as pd
|
|
17
|
+
from pandas.api.types import is_integer
|
|
18
|
+
|
|
19
|
+
from ...core import ENTITY_TYPE
|
|
20
|
+
from ...tensor import tensor as astensor
|
|
21
|
+
from ...tensor.statistics.percentile import percentile
|
|
22
|
+
from ..core import DATAFRAME_TYPE, SERIES_TYPE
|
|
23
|
+
from ..initializer import DataFrame, Series
|
|
24
|
+
from .cut import cut
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def qcut(x, q, labels=None, retbins=False, precision=3, duplicate="raise"):
|
|
28
|
+
"""
|
|
29
|
+
Quantile-based discretization function.
|
|
30
|
+
|
|
31
|
+
Discretize variable into equal-sized buckets based on rank or based
|
|
32
|
+
on sample quantiles. For example 1000 values for 10 quantiles would
|
|
33
|
+
produce a Categorical object indicating quantile membership for each data point.
|
|
34
|
+
|
|
35
|
+
Parameters
|
|
36
|
+
----------
|
|
37
|
+
x : 1d tensor or Series
|
|
38
|
+
q : int or list-like of float
|
|
39
|
+
Number of quantiles. 10 for deciles, 4 for quartiles, etc. Alternately
|
|
40
|
+
array of quantiles, e.g. [0, .25, .5, .75, 1.] for quartiles.
|
|
41
|
+
labels : array or False, default None
|
|
42
|
+
Used as labels for the resulting bins. Must be of the same length as
|
|
43
|
+
the resulting bins. If False, return only integer indicators of the
|
|
44
|
+
bins. If True, raises an error.
|
|
45
|
+
retbins : bool, optional
|
|
46
|
+
Whether to return the (bins, labels) or not. Can be useful if bins
|
|
47
|
+
is given as a scalar.
|
|
48
|
+
precision : int, optional
|
|
49
|
+
The precision at which to store and display the bins labels.
|
|
50
|
+
duplicates : {default 'raise', 'drop'}, optional
|
|
51
|
+
If bin edges are not unique, raise ValueError or drop non-uniques.
|
|
52
|
+
|
|
53
|
+
Returns
|
|
54
|
+
-------
|
|
55
|
+
out : Categorical or Series or tensor of integers if labels is False
|
|
56
|
+
The return type (Categorical or Series) depends on the input: a Series
|
|
57
|
+
of type category if input is a Series else Categorical. Bins are
|
|
58
|
+
represented as categories when categorical data is returned.
|
|
59
|
+
bins : tensor of floats
|
|
60
|
+
Returned only if `retbins` is True.
|
|
61
|
+
|
|
62
|
+
Notes
|
|
63
|
+
-----
|
|
64
|
+
Out of bounds values will be NA in the resulting Categorical object
|
|
65
|
+
|
|
66
|
+
Examples
|
|
67
|
+
--------
|
|
68
|
+
>>> import maxframe.dataframe as md
|
|
69
|
+
>>> md.qcut(range(5), 4).execute()
|
|
70
|
+
... # doctest: +ELLIPSIS
|
|
71
|
+
[(-0.001, 1.0], (-0.001, 1.0], (1.0, 2.0], (2.0, 3.0], (3.0, 4.0]]
|
|
72
|
+
Categories (4, interval[float64]): [(-0.001, 1.0] < (1.0, 2.0] ...
|
|
73
|
+
|
|
74
|
+
>>> md.qcut(range(5), 3, labels=["good", "medium", "bad"]).execute()
|
|
75
|
+
... # doctest: +SKIP
|
|
76
|
+
[good, good, medium, bad, bad]
|
|
77
|
+
Categories (3, object): [good < medium < bad]
|
|
78
|
+
|
|
79
|
+
>>> md.qcut(range(5), 4, labels=False).execute()
|
|
80
|
+
array([0, 0, 1, 2, 3])
|
|
81
|
+
"""
|
|
82
|
+
if is_integer(q):
|
|
83
|
+
q = np.linspace(0, 1, q + 1)
|
|
84
|
+
|
|
85
|
+
if isinstance(x, (DATAFRAME_TYPE, SERIES_TYPE, pd.DataFrame, pd.Series)):
|
|
86
|
+
x = DataFrame(x) if x.ndim == 2 else Series(x)
|
|
87
|
+
bins = x.quantile(q)
|
|
88
|
+
else:
|
|
89
|
+
x = astensor(x)
|
|
90
|
+
if isinstance(q, ENTITY_TYPE):
|
|
91
|
+
q = q * 100
|
|
92
|
+
else:
|
|
93
|
+
q = [iq * 100 for iq in q]
|
|
94
|
+
bins = percentile(x, q)
|
|
95
|
+
|
|
96
|
+
return cut(
|
|
97
|
+
x,
|
|
98
|
+
bins,
|
|
99
|
+
labels=labels,
|
|
100
|
+
retbins=retbins,
|
|
101
|
+
precision=precision,
|
|
102
|
+
include_lowest=True,
|
|
103
|
+
duplicates=duplicate,
|
|
104
|
+
)
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from ..utils import build_empty_df
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def select_dtypes(df, include=None, exclude=None):
|
|
19
|
+
"""
|
|
20
|
+
Return a subset of the DataFrame's columns based on the column dtypes.
|
|
21
|
+
|
|
22
|
+
Parameters
|
|
23
|
+
----------
|
|
24
|
+
include, exclude : scalar or list-like
|
|
25
|
+
A selection of dtypes or strings to be included/excluded. At least
|
|
26
|
+
one of these parameters must be supplied.
|
|
27
|
+
|
|
28
|
+
Returns
|
|
29
|
+
-------
|
|
30
|
+
DataFrame
|
|
31
|
+
The subset of the frame including the dtypes in ``include`` and
|
|
32
|
+
excluding the dtypes in ``exclude``.
|
|
33
|
+
|
|
34
|
+
Raises
|
|
35
|
+
------
|
|
36
|
+
ValueError
|
|
37
|
+
* If both of ``include`` and ``exclude`` are empty
|
|
38
|
+
* If ``include`` and ``exclude`` have overlapping elements
|
|
39
|
+
* If any kind of string dtype is passed in.
|
|
40
|
+
|
|
41
|
+
See Also
|
|
42
|
+
--------
|
|
43
|
+
DataFrame.dtypes: Return Series with the data type of each column.
|
|
44
|
+
|
|
45
|
+
Notes
|
|
46
|
+
-----
|
|
47
|
+
* To select all *numeric* types, use ``np.number`` or ``'number'``
|
|
48
|
+
* To select strings you must use the ``object`` dtype, but note that
|
|
49
|
+
this will return *all* object dtype columns
|
|
50
|
+
* See the `numpy dtype hierarchy
|
|
51
|
+
<https://numpy.org/doc/stable/reference/arrays.scalars.html>`__
|
|
52
|
+
* To select datetimes, use ``np.datetime64``, ``'datetime'`` or
|
|
53
|
+
``'datetime64'``
|
|
54
|
+
* To select timedeltas, use ``np.timedelta64``, ``'timedelta'`` or
|
|
55
|
+
``'timedelta64'``
|
|
56
|
+
* To select Pandas categorical dtypes, use ``'category'``
|
|
57
|
+
* To select Pandas datetimetz dtypes, use ``'datetimetz'`` (new in
|
|
58
|
+
0.20.0) or ``'datetime64[ns, tz]'``
|
|
59
|
+
|
|
60
|
+
Examples
|
|
61
|
+
--------
|
|
62
|
+
>>> import maxframe.dataframe as md
|
|
63
|
+
>>> df = md.DataFrame({'a': [1, 2] * 3,
|
|
64
|
+
... 'b': [True, False] * 3,
|
|
65
|
+
... 'c': [1.0, 2.0] * 3})
|
|
66
|
+
>>> df.execute()
|
|
67
|
+
a b c
|
|
68
|
+
0 1 True 1.0
|
|
69
|
+
1 2 False 2.0
|
|
70
|
+
2 1 True 1.0
|
|
71
|
+
3 2 False 2.0
|
|
72
|
+
4 1 True 1.0
|
|
73
|
+
5 2 False 2.0
|
|
74
|
+
|
|
75
|
+
>>> df.select_dtypes(include='bool').execute()
|
|
76
|
+
b
|
|
77
|
+
0 True
|
|
78
|
+
1 False
|
|
79
|
+
2 True
|
|
80
|
+
3 False
|
|
81
|
+
4 True
|
|
82
|
+
5 False
|
|
83
|
+
|
|
84
|
+
>>> df.select_dtypes(include=['float64']).execute()
|
|
85
|
+
c
|
|
86
|
+
0 1.0
|
|
87
|
+
1 2.0
|
|
88
|
+
2 1.0
|
|
89
|
+
3 2.0
|
|
90
|
+
4 1.0
|
|
91
|
+
5 2.0
|
|
92
|
+
|
|
93
|
+
>>> df.select_dtypes(exclude=['int64']).execute()
|
|
94
|
+
b c
|
|
95
|
+
0 True 1.0
|
|
96
|
+
1 False 2.0
|
|
97
|
+
2 True 1.0
|
|
98
|
+
3 False 2.0
|
|
99
|
+
4 True 1.0
|
|
100
|
+
5 False 2.0
|
|
101
|
+
"""
|
|
102
|
+
test_df = build_empty_df(df.dtypes)
|
|
103
|
+
test_df = test_df.select_dtypes(include=include, exclude=exclude)
|
|
104
|
+
return df[test_df.dtypes.index.tolist()]
|