> 백엔드 개발 > 파이썬 튜토리얼 > Pandas DataFrame 열을 여러 행으로 중첩 해제하는 방법은 무엇입니까?

Pandas DataFrame 열을 여러 행으로 중첩 해제하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-21 00:47:09
원래의
527명이 탐색했습니다.

How to Unnest a Pandas DataFrame Column into Multiple Rows?

Pandas DataFrame에서 열을 여러 행으로 중첩 해제하는 방법

문제:

하나의 열에 값 목록이 포함된 DataFrame이 있고 각 목록 요소를 분리하려고 합니다.

해결책:

Pandas DataFrame에서 열을 중첩 해제(또는 분해)하는 방법에는 여러 가지가 있습니다.

방법 1: 폭발 사용(Pandas >= 0.25)

중첩 해제할 단일 열이 있는 경우 분해 기능이 가장 간단한 솔루션입니다.

df.explode('B')
로그인 후 복사

방법 2: Apply 및 pd.Series 사용

이 방법은 간단하지만 성능을 위해서는 권장되지 않습니다. 이유:

df.set_index('A').B.apply(pd.Series).stack().reset_index(level=0).rename(columns={0:'B'})
로그인 후 복사

방법 3: 반복 및 DataFrame 생성자 사용

중첩되지 않은 열에 반복되는 값을 사용하여 새 DataFrame을 만듭니다.

df=pd.DataFrame({'A':df.A.repeat(df.B.str.len()),'B':np.concatenate(df.B.values)})
로그인 후 복사

방법 4: reindex 또는 loc

중첩되지 않은 값으로 새 DataFrame을 생성하고 reindex 또는 loc를 사용하여 원본과 정렬합니다.

df.reindex(df.index.repeat(df.B.str.len())).assign(B=np.concatenate(df.B.values))
로그인 후 복사

방법 5: collections.ChainMap 사용( 목록에 고유한 항목이 포함된 경우 값)

from collections import ChainMap
d = dict(ChainMap(*map(dict.fromkeys, df['B'], df['A'])))
pd.DataFrame(list(d.items()),columns=df.columns[::-1])
로그인 후 복사

방법 6: 고성능을 위해 Numpy 사용

이 방법은 이전 방법보다 더 효율적입니다.

newvalues=np.dstack((np.repeat(df.A.values,list(map(len,df.B.values))),np.concatenate(df.B.values)))
pd.DataFrame(data=newvalues[0],columns=df.columns)
로그인 후 복사

방법 7: itertools.cycle 사용 및 itertools.chain

재미를 위한 순수 Python 솔루션:

from itertools import cycle,chain
l=df.values.tolist()
l1=[list(zip([x[0]], cycle(x[1])) if len([x[0]]) > len(x[1]) else list(zip(cycle([x[0]]), x[1]))) for x in l]
pd.DataFrame(list(chain.from_iterable(l1)),columns=df.columns)
로그인 후 복사

여러 열로 일반화:

다음 함수를 사용하면 다음을 수행할 수 있습니다. 여러 열의 중첩을 해제합니다. DataFrame:

def unnesting(df, explode):
    idx = df.index.repeat(df[explode[0]].str.len())
    df1 = pd.concat([
        pd.DataFrame({x: np.concatenate(df[x].values)}) for x in explode], axis=1)
    df1.index = idx

    return df1.join(df.drop(explode, 1), how='left')
로그인 후 복사

열별 중첩 해제:

열을 수평으로 중첩 해제해야 하는 경우 DataFrame 생성자의 add_prefix 메서드를 사용하세요.

df.join(pd.DataFrame(df.B.tolist(),index=df.index).add_prefix('B_'))
로그인 후 복사

위 내용은 Pandas DataFrame 열을 여러 행으로 중첩 해제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿