a_df = pd.DataFrame([
        {
            "Name": "A 회사 직원 (1)",
            "Age": 30,
        },
        {
            "Name": "A 회사 직원 (2)",
            "Age": 29,
        }
    ])

b_df = pd.DataFrame([
        {
            "Name": "B 회사 직원 (1)",
            "Age": 33,
        },
        {
            "Name": "B 회사 직원 (2)",
            "Age": 26,
        }
    ])

a_df

"""
Explanation: 1T_Pandas Basic (1) - 데이터 추가하기 ( pd.concat, df.append )

Pandas DataFarme 합치고 추가하기 (append / concat)
서울시의 데이터프레임과 부산시의 데이터프레임은 전혀 상관이 없었던 것을 합쳤었던거야. => Row 합치기에 해당
합치는 기준이 따로 있어. row 기준 따로 있고 Column 기준이 따로 있어.


Row를 기준으로 df를 합치는 것 - append, concat




Column을 기준으로 df를 합치는 것 - concat(... , axis=1)



Row 합치기부터

Df, Df2 합치기. append, concat 기능을 사용할 것이다.
2개의 회사로 가정해보자
End of explanation
"""


a_df + b_df    # Matrix Sum 과 유사하게 합쳐진다. (행렬합처럼)

"""
Explanation: A와 B 회사가 합병해서 하나의 DF으로 만들자.
End of explanation
"""


together_df = pd.DataFrame(columns=["Name", "Age"])
# for문을 돌리면서 together_df.loc[len(together_Df)] ...

a_df.append(b_df)

a_df

ab_df = a_df.append(b_df)   #이렇게 하면 inplace로 바꿀 수 있다.

ab_df.loc[0]  #2개가 나와 버린다. 인덱스가 중복되었기 때문

# 1. 번외로 index가 중복 되었을 때 해결하는 방법!
ab_df.reset_index()

a_df["Age"]   #Series  => 특정 Column 하나만 가져오는 애

a_df[["Age"]]   #리스트를 받으면. DataFrame => 특정 Columns들만 가져오는 애

ab_df.reset_index()[["Name", "Age"]]   #이렇게 해도 되지만 번거롭다.

ab_df.reset_index(drop=True)

ab_df.reset_index(drop=True, inplace=True)   #이거 명령어 추가하면 원본 데이터가 변경된다.

"""
Explanation: append   2. concat 이 있어.




append 우선 이것부터
End of explanation
"""


pd.concat([a_df, b_df])

ab_df = pd.concat([a_df, b_df]).reset_index(drop=True)

ab_df

"""
Explanation: pd.concat
End of explanation
"""


a_df["Company"] = "KaKao"
b_df["Company"] = "Daum"
ab_df = pd.concat([a_df, b_df])
ab_df

# 카카오에 다녔던 친구를 뽑고 싶습니다.
# 칼럼의 값을 비교해서 True/False series를 만들고 원본 데이터프레임에서 시리즈의 값이 True인 친구만 뽑는다.(행렬곱)

is_kakao = ab_df["Company"] == "KaKao"
is_kakao

ab_df[is_kakao]   #지금은 Series로 들어갔다.

"""
Explanation: 카카오(A)와 다음(B) 합병 했는데 누가 어디 출신인지 알고 싶다.
End of explanation
"""


a_df = a_df[["Name", "Age"]]
b_df = b_df[["Name", "Age"]]

b_df

"""
Explanation: df[STR] => 그 칼럼의 값들에 대한 시리즈
df[STR List] => 그 칼럼들만 가져온 데이터프레임
df[Series] => True인 Row들만 가져온 데이터프레임
End of explanation
"""


ab_df = pd.concat([a_df, b_df], keys=["KaKao", "Daum"])

ab_df.loc["KaKao"]   # 결과가 DataFrame 으로 나왔다.

a_df.loc[0]   #결과가 Series로 나온다. 원본 데이터 형태에 따라서 결과가 다르게 나온다.

ab_df.loc["KaKao"].loc[0]

"""
Explanation: pd.concat으로 인덱스 기준으로 상위 하위 개념 나눌 수 있다.
End of explanation
"""


name_email_df = pd.DataFrame([
        {
            "Name": "김기표",
            "Email": "kkp@gmail.com",
        },
        {
            "Name": "유영수",
            "Email": "yys@naver.com",
        }
    ])

address_df = pd.DataFrame([
        {
            "Address": "패캠 대기빌딩 김기표님 앞",
        },
        {
            "Address": "패캠 대기빌딩 유영수님 앞",
        }
    ])

name_email_df

address_df

name_email_df + address_df

pd.concat([name_email_df, address_df])

"""
Explanation: 위에서 Row로 합치는 것을 했다.
이제는 Column을 합치는 과정에 대해서. concat을 쓸 거야
End of explanation
"""


pd.concat([name_email_df, address_df], axis=1)   #기본값으로 0, False가 들어가 있다.

pd.concat([name_email_df, address_df], axis=True)

name_email_df = pd.DataFrame([
        {
            "Name": "김기표",
            "Email": "kkp@naver.co.kr",
        },
        {
            "Name": "김기준",
            "Email": "sj@gmail.co.kr",
        }
    ])

address_df = pd.DataFrame([
        {
            "Address": "패캠 대기빌딩 김기표님 앞",
        },
        {
            "Address": "패캠 대기빌딩 김기준님 앞",
        },
        {
            "Address": "패캠 대기빌딩 김기상님 앞",
        }
    ])

pd.concat([name_email_df, address_df], axis=1)

"""
Explanation: row를 기준으로 (즉 x축을 기준으로) concat을 한 것이다.
이제는 column을 기준으로 ( y축을 기준으로) concat을 하도록 axis를 변경해줘야 한다.
End of explanation
"""


ab_df = a_df.append(b_df).reset_index(drop=True)
ab_df

ab_df.iterrows()

for index, row in ab_df.iterrows():     #가능하면 for문 말고 다른 방법을 찾아보자.
    print(row)                          #row를 기준으로 iteration을 돈다.
    
# iterrows => 수작업으로 고생을 해서 구현을 하다가 => pandas내부기능으로 옮기는 작업을 할 예정이다.

"""
Explanation: pandas에서 for문을 돌리는 방법이 따로 있다.
End of explanation
"""


