판다스 데이터프레임 열로 나열된 Group을 기준으로 각 항목의 Pair를 만들고 싶습니다

조회수 45회

데이터프래임이 아래와 같이 id와 title 구성되어 있습니다.
같은 id에 속한 title 항목을 쌍으로 만들고 싶습니다.

초기 데이터 프레임

id     title
1     'A'
1     'B'
1     'C'
2     'D'
2     'E'
3     'F'
3     'G'
3     'H

결과 데이터 프레임

id     title_1     title_2
1     'A'            'B'
1     'B'           'C'
1     'C'            'A'
2     'D'            'E'
3     'G'            'H'

1 답변

  • 판다스를 이용했다고 볼 수는 없는데, 어쨌든 쭉 한번 보세요.

    >>> import pandas as pd
    >>> from itertools import combinations
    
    
    >>> df = pd.DataFrame({ "id":[1,1,1,2,2,3,3,3], "title":list("ABCDEFGH") })
    >>> df
       id title
    0   1     A
    1   1     B
    2   1     C
    3   2     D
    4   2     E
    5   3     F
    6   3     G
    7   3     H
    
    
    >>> df[df["id"] == 1]["title"]
    0    A
    1    B
    2    C
    Name: title, dtype: object
    
    
    >>> list(combinations(df[df["id"]==1]["title"], 2))
    [('A', 'B'), ('A', 'C'), ('B', 'C')]
    
    
    >>> for _id in df["id"].unique():
        print(_id)
    
    
    1
    2
    3
    >>> for _id in df["id"].unique():
        for pair in combinations(df[df["id"]==_id]["title"], 2):
            print(_id, pair)
    
    
    1 ('A', 'B')
    1 ('A', 'C')
    1 ('B', 'C')
    2 ('D', 'E')
    3 ('F', 'G')
    3 ('F', 'H')
    3 ('G', 'H')
    >>> data = []
    >>> for _id in df["id"].unique():
        for pair in combinations(df[df["id"]==_id]["title"], 2):
            data.append({ "id":_id, "title_1":pair[0], "title_2":pair[1] })
    
    
    >>> df2 = pd.DataFrame(data)
    >>> df2
       id title_1 title_2
    0   1       A       B
    1   1       A       C
    2   1       B       C
    3   2       D       E
    4   3       F       G
    5   3       F       H
    6   3       G       H
    

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

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.