Pivot

Pivot

  • index, value, column 데이터를 데이터 프레임의 컬럼 데이터에서 선택해서 만드는 방법

1. groupby, pivot 사용

titanic_df1 = titanic.groupby(["Sex", "Pclass"]).size().reset_index(name="counts")
=>
Sex	Pclass	Counts
0	female	1	94
1	female	2	76
2	female	3	144
3	male	1	122
4	male	2	108
5	male	3	347

titanic_df2 = titanic_df1.pivot("Sex", "Pclass", "counts")
=>
Pclass	1	2	3
Sex			
female	94	76	144
male	122	108	347
titanic_df1 = titanic.groupby(["Sex","Survived"]).size().reset_index(name="counts")
=>
Sex	Survived	Counts
0	female	0	81
1	female	1	233
2	male	0	468
3	male	1	109

titanic_df2 = titanic_df1.pivot("Sex","Survived", "counts")
=>
Survived	0	1
Sex		
female	81	233
male	468	109

2. pivot_table 사용

titanic["Counts"] = 1 #Count 컬럼 만들어서 전부 1 넣기
titanic.pivot_table("Counts", "Survived", "Sex", aggfunc=np.sum)
titanic.pivot_table("Counts", ["Sex", "Pclass"], "Survived", aggfunc=np.sum)
=>
Survived	0	1
   Sex	Pclass		
female	1	3	91
        2	6	70
        3	72	72
male	  1	77	45
        2	91	17
        3	300	47

df["total"] = df["female"] + df["male"]
=>
Sex	     female	male	total
Survived			
       0	81	468	549
       1	233	109	342

df.loc["total"] = df.loc[0] + df.loc[1]
=>
     Sex	female	male	total
Survived			
       0	81	468	549
       1	233	109	342
   total	314	577	891

# 로우 데이터 삭제
df.drop("total", inplace=True)
=>
     Sex	female	male	total
Survived			
       0	81	468	549
       1	233	109	342

# 컬럼 데이터 삭제
df.drop("total", inplace=True)
=>
     Sex	female	male
Survived		
       0	81	468
       1	233	109

titanic.pivot_table("Count", "Survived", ["parch", "Pclass"], aggfunc=np.sum)
titanic.pivot_table("Count", "Survived", ["parch", "Pclass"], aggfunc=np.sum, fill_value=0) #NaN데이터 0으로 채우기
titanic.pivot_table("Count", "Survived", ["parch", "Pclass"], aggfunc=np.sum, dropna=False, fill_value=0) #없는 값도 모두 표시하

데이터 처리

  • 불필요한 feature 데이터 제거
  • nan 데이터가 있는 레코드 제거
  • 원핫 인코딩
  • 연령대 컬럼 만들기
  • 20대 이산은 성인이라는 컬럼을 만들어 0, 1을 추가
#필요한 컬럼데이터만 필터링
titanic[['Survived', 'Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']]
#필요없는 컬럼 데이터 제거 : drop
titanic.drop(columns=["PassengerId", "Name", "Ticket", "Cabin", "Count"])
#nan 데이터가 있는 레코드 제거
df[df.notna().all(axis=1)].reset_index(drop=True)
=>
Survived	Pclass	Sex	Age	SibSp	Parch	Fare	Embarked
710	1	1	male	26.0	0	0	30.00	C
711	0	3	male	32.0	0	0	7.75	Q

result["Sex"].unique()
=> array(['male', 'female'], dtype=object)