# Apply reduce against a whole Pandas Series
```python
pip install a-pandas-ex-column-reduce
```
```python
from a_pandas_ex_column_reduce import pd_add_column_reduce
import pandas as pd
pd_add_column_reduce()
df = pd.read_csv(
"https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv"
)
df = df[:10]
result1 = df.PassengerId.s_column_reduce(
expression="str(x) + str(y)", # the expression has to be passed as a string and must contain x/y
own_value_against_own_value=True, # if False: skips when "index of x == index of y"
ignore_exceptions=True, # will ignore the execution of the expression and will go on
print_exceptions=True,
)
print(f"\n\n{result1=}")
result1=0 112345678910
1 212345678910
2 312345678910
3 412345678910
4 512345678910
5 612345678910
6 712345678910
7 812345678910
8 912345678910
9 1012345678910
dtype: object
result2 = df.PassengerId.s_column_reduce(
expression="x + y",
own_value_against_own_value=True,
ignore_exceptions=True,
print_exceptions=True,
)
print(f"\n\n{result2=}")
result2=0 56
1 57
2 58
3 59
4 60
5 61
6 62
7 63
8 64
9 65
dtype: int64
# Updates the column after each iteration
result3 = df.PassengerId.s_column_reduce_update(
expression="x + y if y > 5 else x",
own_value_against_own_value=True,
ignore_exceptions=True,
print_exceptions=True,
)
print(f"\n\n{result3=}")
result3=0 41
1 83
2 167
3 335
4 671
5 1343
6 2681
7 5356
8 10705
9 21402
Name: PassengerId, dtype: int64
# If you use a non-built-in function, you have to pass the function as an argument, and use it as "func" in your expression
# An example using shapely (merging different polygons)
from shapely.ops import unary_union
import shapely
polyshape = []
for k in range(10):
xmin = k * 10 + 5
ymin = k * 10 + 5
xmax = k * 20 + 10
ymax = k * 20 + 10
coordsalls = [[xmin, ymin], [xmax, ymin], [xmax, ymax], [xmin, ymax], [xmin, ymin]]
po = shapely.geometry.Polygon(coordsalls)
polyshape.append(po)
df2 = pd.DataFrame(polyshape)
print(f"\n\n{df2=}")
dfj = df2[0].s_column_reduce(
expression="func([x,y]) if x.intersects(y) else x",
func=unary_union,
own_value_against_own_value=True,
ignore_exceptions=True,
)
print(f"\n\n{dfj=}")
dfj2 = df2[0].s_column_reduce_update(
expression="func([x,y]) if x.intersects(y) else x",
func=unary_union,
own_value_against_own_value=False,
ignore_exceptions=True,
)
print(f"\n\n{dfj2=}")
df2= 0
0 POLYGON ((5 5, 10 5, 10 10, 5 10, 5 5))
1 POLYGON ((15 15, 30 15, 30 30, 15 30, 15 15))
2 POLYGON ((25 25, 50 25, 50 50, 25 50, 25 25))
3 POLYGON ((35 35, 70 35, 70 70, 35 70, 35 35))
4 POLYGON ((45 45, 90 45, 90 90, 45 90, 45 45))
5 POLYGON ((55 55, 110 55, 110 110, 55 110, 55 55))
6 POLYGON ((65 65, 130 65, 130 130, 65 130, 65 65))
7 POLYGON ((75 75, 150 75, 150 150, 75 150, 75 75))
8 POLYGON ((85 85, 170 85, 170 170, 85 170, 85 85))
9 POLYGON ((95 95, 190 95, 190 190, 95 190, 95 95))
dfj=0 POLYGON ((5 5, 5 10, 10 10, 10 5, 5 5))
1 POLYGON ((55 90, 55 110, 65 110, 65 130, 75 13...
2 POLYGON ((45 90, 55 90, 55 110, 65 110, 65 130...
3 POLYGON ((55 90, 55 110, 65 110, 65 130, 75 13...
4 POLYGON ((35 70, 45 70, 45 90, 55 90, 55 110, ...
5 POLYGON ((45 70, 45 90, 55 90, 55 110, 65 110,...
6 POLYGON ((45 70, 45 90, 55 90, 55 110, 65 110,...
7 POLYGON ((45 90, 55 90, 55 110, 65 110, 65 130...
8 POLYGON ((90 55, 90 45, 45 45, 45 90, 55 90, 5...
9 POLYGON ((130 65, 110 65, 110 55, 55 55, 55 11...
dtype: object
dfj2=0 POLYGON ((5 5, 10 5, 10 10, 5 10, 5 5))
1 POLYGON ((45 70, 45 90, 55 90, 55 110, 65 110,...
2 POLYGON ((90 45, 70 45, 70 35, 50 35, 50 25, 3...
3 POLYGON ((90 45, 70 45, 70 35, 50 35, 50 25, 3...
4 POLYGON ((90 45, 70 45, 70 35, 50 35, 50 25, 3...
5 POLYGON ((90 45, 70 45, 70 35, 50 35, 50 25, 3...
6 POLYGON ((50 25, 30 25, 30 15, 15 15, 15 30, 2...
7 POLYGON ((85 150, 85 170, 95 170, 95 190, 190 ...
8 POLYGON ((85 150, 85 170, 95 170, 95 190, 190 ...
9 POLYGON ((85 150, 85 170, 95 170, 95 190, 190 ...
Name: 0, dtype: object
```
Raw data
{
"_id": null,
"home_page": "https://github.com/hansalemaos/a_pandas_ex_column_reduce",
"name": "a-pandas-ex-column-reduce",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "pandas,DataFrame,reduce,Series,apply",
"author": "Johannes Fischer",
"author_email": "<aulasparticularesdealemaosp@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/b1/15/2719085482afdc2ea126d7f8288b3917f5304b4a5026bac5a76066a57d45/a_pandas_ex_column_reduce-0.10.tar.gz",
"platform": null,
"description": "\n# Apply reduce against a whole Pandas Series\n\n\n\n```python\n\npip install a-pandas-ex-column-reduce\n\n```\n\n\n\n```python\n\n\n\nfrom a_pandas_ex_column_reduce import pd_add_column_reduce\n\nimport pandas as pd\n\npd_add_column_reduce()\n\ndf = pd.read_csv(\n\n \"https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv\"\n\n)\n\ndf = df[:10]\n\nresult1 = df.PassengerId.s_column_reduce(\n\n expression=\"str(x) + str(y)\", # the expression has to be passed as a string and must contain x/y\n\n own_value_against_own_value=True, # if False: skips when \"index of x == index of y\"\n\n ignore_exceptions=True, # will ignore the execution of the expression and will go on\n\n print_exceptions=True,\n\n)\n\nprint(f\"\\n\\n{result1=}\")\n\n\n\nresult1=0 112345678910\n\n1 212345678910\n\n2 312345678910\n\n3 412345678910\n\n4 512345678910\n\n5 612345678910\n\n6 712345678910\n\n7 812345678910\n\n8 912345678910\n\n9 1012345678910\n\ndtype: object\n\n\n\n\n\nresult2 = df.PassengerId.s_column_reduce(\n\n expression=\"x + y\",\n\n own_value_against_own_value=True,\n\n ignore_exceptions=True,\n\n print_exceptions=True,\n\n)\n\nprint(f\"\\n\\n{result2=}\")\n\n\n\nresult2=0 56\n\n1 57\n\n2 58\n\n3 59\n\n4 60\n\n5 61\n\n6 62\n\n7 63\n\n8 64\n\n9 65\n\ndtype: int64\n\n\n\n\n\n# Updates the column after each iteration\n\nresult3 = df.PassengerId.s_column_reduce_update(\n\n expression=\"x + y if y > 5 else x\",\n\n own_value_against_own_value=True,\n\n ignore_exceptions=True,\n\n print_exceptions=True,\n\n)\n\n\n\n\n\nprint(f\"\\n\\n{result3=}\")\n\n\n\n\n\nresult3=0 41\n\n1 83\n\n2 167\n\n3 335\n\n4 671\n\n5 1343\n\n6 2681\n\n7 5356\n\n8 10705\n\n9 21402\n\nName: PassengerId, dtype: int64\n\n\n\n\n\n# If you use a non-built-in function, you have to pass the function as an argument, and use it as \"func\" in your expression\n\n# An example using shapely (merging different polygons)\n\nfrom shapely.ops import unary_union\n\nimport shapely\n\npolyshape = []\n\nfor k in range(10):\n\n xmin = k * 10 + 5\n\n ymin = k * 10 + 5\n\n xmax = k * 20 + 10\n\n ymax = k * 20 + 10\n\n coordsalls = [[xmin, ymin], [xmax, ymin], [xmax, ymax], [xmin, ymax], [xmin, ymin]]\n\n po = shapely.geometry.Polygon(coordsalls)\n\n polyshape.append(po)\n\n\t\n\ndf2 = pd.DataFrame(polyshape)\n\nprint(f\"\\n\\n{df2=}\")\n\ndfj = df2[0].s_column_reduce(\n\n expression=\"func([x,y]) if x.intersects(y) else x\",\n\n func=unary_union,\n\n own_value_against_own_value=True,\n\n ignore_exceptions=True,\n\n)\n\nprint(f\"\\n\\n{dfj=}\")\n\ndfj2 = df2[0].s_column_reduce_update(\n\n expression=\"func([x,y]) if x.intersects(y) else x\",\n\n func=unary_union,\n\n own_value_against_own_value=False,\n\n ignore_exceptions=True,\n\n)\n\nprint(f\"\\n\\n{dfj2=}\")\n\n\n\n\n\ndf2= 0\n\n0 POLYGON ((5 5, 10 5, 10 10, 5 10, 5 5))\n\n1 POLYGON ((15 15, 30 15, 30 30, 15 30, 15 15))\n\n2 POLYGON ((25 25, 50 25, 50 50, 25 50, 25 25))\n\n3 POLYGON ((35 35, 70 35, 70 70, 35 70, 35 35))\n\n4 POLYGON ((45 45, 90 45, 90 90, 45 90, 45 45))\n\n5 POLYGON ((55 55, 110 55, 110 110, 55 110, 55 55))\n\n6 POLYGON ((65 65, 130 65, 130 130, 65 130, 65 65))\n\n7 POLYGON ((75 75, 150 75, 150 150, 75 150, 75 75))\n\n8 POLYGON ((85 85, 170 85, 170 170, 85 170, 85 85))\n\n9 POLYGON ((95 95, 190 95, 190 190, 95 190, 95 95))\n\n\n\ndfj=0 POLYGON ((5 5, 5 10, 10 10, 10 5, 5 5))\n\n1 POLYGON ((55 90, 55 110, 65 110, 65 130, 75 13...\n\n2 POLYGON ((45 90, 55 90, 55 110, 65 110, 65 130...\n\n3 POLYGON ((55 90, 55 110, 65 110, 65 130, 75 13...\n\n4 POLYGON ((35 70, 45 70, 45 90, 55 90, 55 110, ...\n\n5 POLYGON ((45 70, 45 90, 55 90, 55 110, 65 110,...\n\n6 POLYGON ((45 70, 45 90, 55 90, 55 110, 65 110,...\n\n7 POLYGON ((45 90, 55 90, 55 110, 65 110, 65 130...\n\n8 POLYGON ((90 55, 90 45, 45 45, 45 90, 55 90, 5...\n\n9 POLYGON ((130 65, 110 65, 110 55, 55 55, 55 11...\n\ndtype: object\n\n\n\ndfj2=0 POLYGON ((5 5, 10 5, 10 10, 5 10, 5 5))\n\n1 POLYGON ((45 70, 45 90, 55 90, 55 110, 65 110,...\n\n2 POLYGON ((90 45, 70 45, 70 35, 50 35, 50 25, 3...\n\n3 POLYGON ((90 45, 70 45, 70 35, 50 35, 50 25, 3...\n\n4 POLYGON ((90 45, 70 45, 70 35, 50 35, 50 25, 3...\n\n5 POLYGON ((90 45, 70 45, 70 35, 50 35, 50 25, 3...\n\n6 POLYGON ((50 25, 30 25, 30 15, 15 15, 15 30, 2...\n\n7 POLYGON ((85 150, 85 170, 95 170, 95 190, 190 ...\n\n8 POLYGON ((85 150, 85 170, 95 170, 95 190, 190 ...\n\n9 POLYGON ((85 150, 85 170, 95 170, 95 190, 190 ...\n\nName: 0, dtype: object\n\n```\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Apply reduce against a whole Pandas Series",
"version": "0.10",
"split_keywords": [
"pandas",
"dataframe",
"reduce",
"series",
"apply"
],
"urls": [
{
"comment_text": "",
"digests": {
"md5": "1b02916c6d10b396debb14421df62c82",
"sha256": "2553cb7a33ad5a258300cae8d722ae4583cdb203f70b6aa3352a8125760bb091"
},
"downloads": -1,
"filename": "a_pandas_ex_column_reduce-0.10-py3-none-any.whl",
"has_sig": false,
"md5_digest": "1b02916c6d10b396debb14421df62c82",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 7399,
"upload_time": "2022-12-19T16:32:10",
"upload_time_iso_8601": "2022-12-19T16:32:10.419068Z",
"url": "https://files.pythonhosted.org/packages/08/db/3a495ce5bec53acd2f56e236909c9cb80fe67a4279711fc61acd18ccf6cb/a_pandas_ex_column_reduce-0.10-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "aed33315c6e5a6ad844d7613fe363aef",
"sha256": "7d4cf1b9fe1b8bb933dd209c34fcb4f15d2a23f3e1398a2a3b74bac18afcd17b"
},
"downloads": -1,
"filename": "a_pandas_ex_column_reduce-0.10.tar.gz",
"has_sig": false,
"md5_digest": "aed33315c6e5a6ad844d7613fe363aef",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 5964,
"upload_time": "2022-12-19T16:32:12",
"upload_time_iso_8601": "2022-12-19T16:32:12.151447Z",
"url": "https://files.pythonhosted.org/packages/b1/15/2719085482afdc2ea126d7f8288b3917f5304b4a5026bac5a76066a57d45/a_pandas_ex_column_reduce-0.10.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2022-12-19 16:32:12",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "hansalemaos",
"github_project": "a_pandas_ex_column_reduce",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "pandas",
"specs": []
}
],
"lcname": "a-pandas-ex-column-reduce"
}