[python] Pandas DataFrame : 조건에 따라 열의 모든 값을 바꿉니다.

다음과 같은 간단한 DataFrame이 있습니다.

Pandas DataFrame

‘First Season’열에서 모든 값을 선택하고 1990 년이 넘는 값을 1로 바꾸고 싶습니다.이 예에서 Baltimore Ravens만이 1996 년을 1로 바 꾸었습니다 (나머지 데이터는 그대로 유지).

다음을 사용했습니다.

df.loc[(df['First Season'] > 1990)] = 1

그러나 ‘First Season’열의 값뿐만 아니라 해당 행의 모든 ​​값을 1로 대체합니다.

해당 열의 값만 어떻게 바꿀 수 있습니까?



답변

해당 열을 선택해야합니다.

In [41]:
df.loc[df['First Season'] > 1990, 'First Season'] = 1
df

Out[41]:
                 Team  First Season  Total Games
0      Dallas Cowboys          1960          894
1       Chicago Bears          1920         1357
2   Green Bay Packers          1921         1339
3      Miami Dolphins          1966          792
4    Baltimore Ravens             1          326
5  San Franciso 49ers          1950         1003

따라서 여기의 구문은 다음과 같습니다.

df.loc[<mask>(here mask is generating the labels to index) , <optional column(s)> ]

문서 와 의미를 보여주는 pandas까지 10 분을 확인할 수 있습니다.

편집하다

당신은 부울 지표를 생성 할 경우, 당신은 부울 시리즈를 생성하는 부울 조건을 사용하여에 DTYPE 캐스트 할 수 있습니다 int이 변환됩니다 TrueFalse10각각 :

In [43]:
df['First Season'] = (df['First Season'] > 1990).astype(int)
df

Out[43]:
                 Team  First Season  Total Games
0      Dallas Cowboys             0          894
1       Chicago Bears             0         1357
2   Green Bay Packers             0         1339
3      Miami Dolphins             0          792
4    Baltimore Ravens             1          326
5  San Franciso 49ers             0         1003


답변

파티에 조금 늦었지만 여전히 numpy를 사용하는 것을 선호합니다.

import numpy as np
df['First Season'] = np.where(df['First Season'] > 1990, 1, df['First Season'])


답변

df['First Season'].loc[(df['First Season'] > 1990)] = 1

아무도이 대답을 가지고 있지 않다는 것이 이상합니다. 코드에서 빠진 부분은 df 바로 뒤에있는 [ ‘First Season’]이며 내부의 중괄호를 제거하십시오.


답변

단일 조건, 즉. ( 'employrate'] > 70 )

       country        employrate alcconsumption
0  Afghanistan  55.7000007629394            .03
1      Albania  51.4000015258789           7.29
2      Algeria              50.5            .69
3      Andorra                            10.17
4       Angola  75.6999969482422           5.57

이것을 사용하십시오 :

df.loc[df['employrate'] > 70, 'employrate'] = 7

       country  employrate alcconsumption
0  Afghanistan   55.700001            .03
1      Albania   51.400002           7.29
2      Algeria   50.500000            .69
3      Andorra         nan          10.17
4       Angola    7.000000           5.57

따라서 여기서 구문은 다음과 같습니다.

df.loc[<mask>(here mask is generating the labels to index) , <optional column(s)> ]

여러 조건 즉. (df['employrate'] <=55) & (df['employrate'] > 50)

이것을 사용하십시오 :

df['employrate'] = np.where(
   (df['employrate'] <=55) & (df['employrate'] > 50) , 11, df['employrate']
   )

out[108]:
       country  employrate alcconsumption
0  Afghanistan   55.700001            .03
1      Albania   11.000000           7.29
2      Algeria   11.000000            .69
3      Andorra         nan          10.17
4       Angola   75.699997           5.57

따라서 여기서 구문은 다음과 같습니다.

 df['<column_name>'] = np.where((<filter 1> ) & (<filter 2>) , <new value>, df['column_name'])


답변

df.loc[df['First season'] > 1990, 'First Season'] = 1

설명:

df.loc‘행 인덱스’와 ‘열 인덱스’라는 두 개의 인수를받습니다. 값이 ‘첫 번째 시즌’열에서 각 행 값의 27보다 큰지 확인한 다음 1로 바꿉니다.


답변