pandas 데이터프레임 if문

조회수 9852회

안녕하세요 value값을 돌면서 if문을 만드려고 합니다. value가 25이상이거나 8이하면 score에 3,
9<=x<=11 이거나 21<=x<=24 이면 2, 나머지는 0을 할당하려고 코드를 짰습니다.

for x in df['value']:

    if (x >=25) or (x<=8):
        df['score']=3
    elif (9<=x<=11) or (21<=x<=24):
        df['score']=2
    else:
        df['score']=0

그런데 결과값을 보면

value    score

29  0
27  0
26  0
27  0
25  0
... ... ... ... ...
15  0
22  0
17  0
20  0
14  0

다 0이되버리네요. 뭐가문제인지 알수있을까요 ? 아니면 if문 말고 더 쉬운방법이 있을까요 ?

  • x를 출력해서 int 값이 맞는지 확인해봐야할 것 같습니다. 초보자 2021.3.23 14:27
  • int맞는데 0으로 출력이되네요. 아랫분께서 해주신대로하니 잘 작동됩니다. 답변감사합니다 ^^ 김수민 2021.3.23 14:37

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기
    Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license()" for more information.
    >>> import pandas as pd
    
    >>> df = pd.DataFrame({ "value": [ 1,2,3,4,5,6,7,11,12,13,14,15,16,1 ] })
    >>> df
        value
    0       1
    1       2
    2       3
    3       4
    4       5
    5       6
    6       7
    7      11
    8      12
    9      13
    10     14
    11     15
    12     16
    13      1
    
    >>> def get_score(v):
        if v < 7:
            score = 0
        elif v < 14:
            score = 1
        elif v < 21:
            score = 2
        else:
            score = 3
        return score
    
    
    >>> df["socre"] = df["value"].apply(lambda v: get_score(v))
    >>> df
        value  socre
    0       1      0
    1       2      0
    2       3      0
    3       4      0
    4       5      0
    5       6      0
    6       7      1
    7      11      1
    8      12      1
    9      13      1
    10     14      2
    11     15      2
    12     16      2
    13      1      0
    >>> 
    

    이런 식으로 하면 될 거고요. 질문하신 코드에서는 df["score"] = 0 이라고 하면, df["score"]의 모든 값이 0이 되어버립니다.

    • 매우 감사합니다 잘작동하네요 ^^ 좋은하루되세요 김수민 2021.3.23 14:37

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)