Skip to main content

Apply each value in a column against the whole column

Project description

Apply each value in a column against the whole column

pip install a-pandas-ex-apply-against-all
from a_pandas_ex_apply_against_all import pd_add_apply_each

import pandas as pd

pd_add_apply_each()

df = pd.read_csv(

    "https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv"

)

df1 = df.PassengerId.s_apply_each(

    expression="str(x) + str(y)", # use always x/y in your expression

    exception_value=pd.NA,

    diagonal_value=pd.NA,

    print_exception=True,

)

print(df1)

      0     1     2     3     4    ...     886     887     888     889     890

0    <NA>    12    13    14    15  ...    1887    1888    1889    1890    1891

1      21  <NA>    23    24    25  ...    2887    2888    2889    2890    2891

2      31    32  <NA>    34    35  ...    3887    3888    3889    3890    3891

3      41    42    43  <NA>    45  ...    4887    4888    4889    4890    4891

4      51    52    53    54  <NA>  ...    5887    5888    5889    5890    5891

..    ...   ...   ...   ...   ...  ...     ...     ...     ...     ...     ...

886  8871  8872  8873  8874  8875  ...    <NA>  887888  887889  887890  887891

887  8881  8882  8883  8884  8885  ...  888887    <NA>  888889  888890  888891

888  8891  8892  8893  8894  8895  ...  889887  889888    <NA>  889890  889891

889  8901  8902  8903  8904  8905  ...  890887  890888  890889    <NA>  890891

890  8911  8912  8913  8914  8915  ...  891887  891888  891889  891890    <NA>

[891 rows x 891 columns]



# If you use a non-built-in function, you have to pass it 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)



df2

Out[7]: 

                                                   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))





df1 = df2[0].s_apply_each(

    expression="func([x,y]) if x.intersects(y) else x", # use always x/y in your expression

    func=unary_union,

    exception_value=pd.NA,

    diagonal_value=pd.NA,

    print_exception=True,

    ignore_exceptions=True

)



Out[8]: 

                                                   0  ...                                                  9

0                                               <NA>  ...            POLYGON ((5 5, 10 5, 10 10, 5 10, 5 5))

1      POLYGON ((15 15, 30 15, 30 30, 15 30, 15 15))  ...      POLYGON ((15 15, 30 15, 30 30, 15 30, 15 15))

2      POLYGON ((25 25, 50 25, 50 50, 25 50, 25 25))  ...      POLYGON ((25 25, 50 25, 50 50, 25 50, 25 25))

3      POLYGON ((35 35, 70 35, 70 70, 35 70, 35 35))  ...      POLYGON ((35 35, 70 35, 70 70, 35 70, 35 35))

4      POLYGON ((45 45, 90 45, 90 90, 45 90, 45 45))  ...      POLYGON ((45 45, 90 45, 90 90, 45 90, 45 45))

5  POLYGON ((55 55, 110 55, 110 110, 55 110, 55 55))  ...  POLYGON ((110 55, 55 55, 55 110, 95 110, 95 19...

6  POLYGON ((65 65, 130 65, 130 130, 65 130, 65 65))  ...  POLYGON ((130 65, 65 65, 65 130, 95 130, 95 19...

7  POLYGON ((75 75, 150 75, 150 150, 75 150, 75 75))  ...  POLYGON ((150 75, 75 75, 75 150, 95 150, 95 19...

8  POLYGON ((85 85, 170 85, 170 170, 85 170, 85 85))  ...  POLYGON ((170 85, 85 85, 85 170, 95 170, 95 19...

9  POLYGON ((95 95, 190 95, 190 190, 95 190, 95 95))  ...                                               <NA>

[10 rows x 10 columns]

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

a_pandas_ex_apply_against_all-0.12.tar.gz (5.6 kB view details)

Uploaded Source

Built Distribution

File details

Details for the file a_pandas_ex_apply_against_all-0.12.tar.gz.

File metadata

File hashes

Hashes for a_pandas_ex_apply_against_all-0.12.tar.gz
Algorithm Hash digest
SHA256 6af813a4084d8df1e1e7c5cafa36caec92d92a42cedec87385d710321b61e023
MD5 96dfd9841e38ac0659693f8905894023
BLAKE2b-256 da48e79742f53c401daf82902884f5a3bbd22fb6bf35943031e7ebcdb4f6e285

See more details on using hashes here.

Provenance

File details

Details for the file a_pandas_ex_apply_against_all-0.12-py3-none-any.whl.

File metadata

File hashes

Hashes for a_pandas_ex_apply_against_all-0.12-py3-none-any.whl
Algorithm Hash digest
SHA256 cfb2f321952a6a7d3df1b980b215cbc059fddd5b1eab8cebf9c34decde82b6b4
MD5 d28d6302540fa36056f5d43f4272487b
BLAKE2b-256 994e1ba3d80836ef13200ea08f3827a11a52a9df1cb2c217634e6c7fd5578a9a

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page