내 데이터에 '연령'에 대한 결 측값이 있으며 그룹 별 열 '제목'을 기준으로 평균으로 바꾸고 싶습니다. 명령 후 :
df.groupby('Title').mean()['Age']
예를 들어 목록을 얻습니다.
미스터 32
미스 21.7
양 28
기타
나는 시도했다 :
df['Age'].replace(np.nan, 0, inplace=True)
df[(df.Age==0.0)&(df.Title=='Mr')]
나이가없고 제목이 한 가지 유형이지만 작동하지 않는 셀만 볼 수 있습니다.
질문 1. 여러 셀이 동시에 두 조건을 모두 충족하더라도 위 코드에 아무 셀도 표시되지 않는 이유 (연령 = 0.0, 제목은 mr)
질문 2. 위에 설명 된대로 그룹 평균을 기반으로 모든 결 측값을 어떻게 바꿀 수 있습니까?
첫 번째 오류를 재현 할 수 없으므로 아래와 같은 예를 사용하면 :
import pandas as pd
import numpy as np
np.random.seed(111)
df = pd.DataFrame({'Title':np.random.choice(['Mr','Miss','Mrs'],20),'Age':np.random.randint(20,50,20)})
df.loc[[5,9,10,11,12],['Age']]=np.nan
데이터 프레임은 다음과 같습니다.
Title Age
0 Mr 42.0
1 Mr 28.0
2 Mr 25.0
3 Mr 32.0
4 Mrs 26.0
5 Miss NaN
6 Mrs 32.0
7 Mrs 33.0
8 Mrs 25.0
9 Mr NaN
10 Miss NaN
11 Mr NaN
12 Mrs NaN
13 Miss 38.0
14 Mr 31.0
15 Mr 42.0
16 Mr 24.0
17 Mrs 23.0
18 Mrs 49.0
19 Miss 27.0
그리고 한 단계 만 더 수행하여 교체 할 수 있습니다.
ave_age = df.groupby('Title').mean()['Age']
df.loc[pd.isna(df['Age']),'Age'] = ave_age[df.loc[pd.isna(df['Age']),'Title']].values
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다