티스토리 뷰

반응형

Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.

Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.

 

아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.

Pandas conditional creation of a series/dataframe column

Pandas의 조건부 시리즈/데이터프레임 열 생성

 문제 내용 

How do I add a color column to the following dataframe so that color='green' if Set == 'Z', and color='red' otherwise?

다음 데이터프레임에 대해, Set 열이 'Z'인 경우 color='green', 그렇지 않은 경우 color='red'가 되도록 색상 열(color column)을 추가하는 방법은 무엇인가요?

 

    Type       Set
1    A          Z
2    B          Z           
3    B          X
4    C          Y

 

 

 높은 점수를 받은 Solution 

If you only have two choices to select from:

만약 선택할 수 있는 옵션이 두 가지만 있는 경우에는 다음과 같이 할 수 있습니다:
df['color'] = np.where(df['Set']=='Z', 'green', 'red')

 

For example,

예를 들어,
import pandas as pd
import numpy as np

df = pd.DataFrame({'Type':list('ABBC'), 'Set':list('ZZXY')})
df['color'] = np.where(df['Set']=='Z', 'green', 'red')
print(df)

 

yields

위 코드는 다음과 같은 출력을 생성합니다:
  Set Type  color
0   Z    A  green
1   Z    B  green
2   X    B    red
3   Y    C    red

If you have more than two conditions then use np.select. For example, if you want color to be

만약 두 가지 이상의 조건이 있다면 np.select를 사용하세요. 예를 들어, 다음과 같은 조건을 만족할 때:

 

  • yellow when (df['Set'] == 'Z') & (df['Type'] == 'A')
  • otherwise blue when (df['Set'] == 'Z') & (df['Type'] == 'B')
  • otherwise purple when (df['Type'] == 'B')
  • otherwise black,
노란색 (df['Set'] == 'Z') & (df['Type'] == 'A')인 경우
그렇지 않으면 파란색 (df['Set'] == 'Z') & (df['Type'] == 'B')인 경우
그렇지 않으면 보라색 (df['Type'] == 'B')인 경우
그렇지 않으면 검은색

 

then use

다음 코드를 사용하세요:
df = pd.DataFrame({'Type':list('ABBC'), 'Set':list('ZZXY')})
conditions = [
    (df['Set'] == 'Z') & (df['Type'] == 'A'),
    (df['Set'] == 'Z') & (df['Type'] == 'B'),
    (df['Type'] == 'B')]
choices = ['yellow', 'blue', 'purple']
df['color'] = np.select(conditions, choices, default='black')
print(df)

 

which yields

위 코드는 다음과 같은 출력을 생성합니다:
  Set Type   color
0   Z    A  yellow
1   Z    B    blue
2   X    B  purple
3   Y    C   black

 

 

 가장 최근 달린 Solution 

if you have only 2 choices, use np.where()

만약 선택할 수 있는 항목이 2개 뿐이라면, np.where()를 사용하세요.
df = pd.DataFrame({'A':range(3)})
df['B'] = np.where(df.A>2, 'yes', 'no')

 

if you have over 2 choices, maybe apply() could work input

만약 선택할 수 있는 항목이 2개 이상이라면, apply()를 사용할 수 있습니다.
arr = pd.DataFrame({'A':list('abc'), 'B':range(3), 'C':range(3,6), 'D':range(6, 9)})

 

and arr is

그리고 arr은 다음과 같습니다.
    A   B   C   D
0   a   0   3   6
1   b   1   4   7
2   c   2   5   8

 

if you want the column E tobe if arr.A =='a' then arr.B elif arr.A=='b' then arr.C elif arr.A == 'c' then arr.D else something_else

만약 arr.A =='a'이면 arr.B, arr.A=='b'이면 arr.C, arr.A == 'c'이면 arr.D, 그렇지 않으면 something_else를 column E로 사용하고 싶다면,
arr['E'] = arr.apply(lambda x: x['B'] if x['A']=='a' else(x['C'] if x['A']=='b' else(x['D'] if x['A']=='c' else 1234)), axis=1)

 

and finally the arr is

마지막으로 arr은 다음과 같습니다.
    A   B   C   D   E
0   a   0   3   6   0
1   b   1   4   7   4
2   c   2   5   8   8

 

 

출처 : https://stackoverflow.com/questions/19913659/pandas-conditional-creation-of-a-series-dataframe-column

반응형
댓글
공지사항
최근에 올라온 글