Python

[Python] map, apply, applymap

,,๐Ÿชจ,, 2024. 10. 16. 23:53
๋ฐ˜์‘ํ˜•

map()


mapํ•จ์ˆ˜๋Š” DataFrame์˜ Seriesํƒ€์ž…์„ Input์œผ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ mapํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด Series๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์›ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

In [1]:

import pandas as pd

In [2]:

df = pd.DataFrame({"age":[30,25,25,12,40],
                  "height":[178,180,160,140,176],
                  "weight":[80,100,55,40,70]})

df

Out[2]:

ageheightweight01234

30 178 80
25 180 100
25 160 55
12 140 40
40 176 70

In [4]:

df['weight(pound)'] = df['weight'].map(lambda x: x*2.205)
df

Out[4]:

ageheightweightweight(pound)01234

30 178 80 176.400
25 180 100 220.500
25 160 55 121.275
12 140 40 88.200
40 176 70 154.350

์œ„์ฒ˜๋Ÿผ lambda ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ํŠน์ • ์‹œ๋ฆฌ์ฆˆ(์ปฌ๋Ÿผ)์— ๋Œ€ํ•ด ์›ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•ด ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

apply()


apply ํ•จ์ˆ˜๋Š” mapํ•จ์ˆ˜์™€ ๋‹ค๋ฅด๊ฒŒ ์ „์ฒด Series(์ปฌ๋Ÿผ)๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์›ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

In [5]:

df.apply(lambda x: x.max()-x.min())

Out[5]:

age               28.0
height            40.0
weight            60.0
weight(pound)    132.3
dtype: float64

์œ„์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์ „์ฒด ์ปฌ๋Ÿผ์— ๋Œ€ํ•˜์—ฌ ์ตœ๋Œ“๊ฐ’ - ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ์ „์ฒด ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด ํŠน์ • ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•ด ๋น ๋ฅธ Summary๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ applyํ•จ์ˆ˜๋Š” axis ์ธ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ์ถ• ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

In [6]:

df.apply(sum, axis=0) # axis=0 ์€ ๋””ํดํŠธ(), ํ–‰๋ฐฉํ–ฅ

Out[6]:

age              132.000
height           834.000
weight           345.000
weight(pound)    760.725
dtype: float64

In [7]:

df.apply(sum, axis=1) # ์—ด๋ฐฉํ–ฅ

Out[7]:

0    464.400
1    525.500
2    361.275
3    280.200
4    440.350
dtype: float64

applymap()


applymap ํ•จ์ˆ˜๋Š” DataFrame์˜ ๋ชจ๋“  element์— ๋Œ€ํ•ด ์›ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ axis์™€ ๊ฐ™์€ ์ธ์ž๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

In [9]:

df.applymap(lambda x:-x)

Out[9]:

ageheightweightweight(pound)01234

-30 -178 -80 -176.400
-25 -180 -100 -220.500
-25 -160 -55 -121.275
-12 -140 -40 -88.200
-40 -176 -70 -154.350

In [ ]:

๋ฐ˜์‘ํ˜•