Pandas, 복잡한 데이터 프레임 구조를 비정규 화하는 방법은 무엇입니까?

ThePyGuy

다음과 같은 데이터 프레임이 있습니다.

         USUBJID   IDVAR IDVARVAL      QNAM                        QVAL
0  Dummy-01-0001   AESEQ      1.0  AEdummy1                  2012-02-15
1  Dummy-01-0002   AESEQ      1.0  AEdummy1                  2012-02-23
2  Dummy-01-0004   AESEQ      1.0  AEdummy1                  2012-02-06
3  Dummy-01-0004   AESEQ      2.0  AEdummy1                  2012-03-10
4  Dummy-01-0005   AESEQ      1.0  AEdummy1                  2012-03-10
5  Dummy-01-0001  AESPID        1  dummy2AE  Gastrointestinal disorders
6  Dummy-01-0002  AESPID        1  dummy2AE     Nervous system disorder
7  Dummy-01-0004  AESPID        2  dummy2AE  Gastrointestinal disorders
8  Dummy-01-0004  AESPID        1  dummy2AE     Nervous system disorder
9  Dummy-01-0005  AESPID        1  dummy2AE  Gastrointestinal disorders

위의 데이터 프레임은 단순한 smaple입니다. 다음 코드를 사용하여 데이터 프레임에 더 많은 데이터를 가져 오십시오. ( 업데이트 된 데이터 )

df = pd.DataFrame({'USUBJID': {0: 'Dummy-01-0001', 1: 'Dummy-01-0002', 2: 'Dummy-01-0004', 3: 'Dummy-01-0004', 4: 'Dummy-01-0005', 5: 'Dummy-01-0007', 6: 'Dummy-01-0008', 7: 'Dummy-01-0008', 8: 'Dummy-01-0010', 9: 'Dummy-01-0010', 10: 'Dummy-01-0011', 11: 'Dummy-01-0011', 12: 'Dummy-01-0013', 13: 'Dummy-01-0013', 14: 'Dummy-01-0014', 15: 'Dummy-01-0016', 16: 'Dummy-01-0016', 17: 'Dummy-01-0019', 18: 'Dummy-01-0001', 19: 'Dummy-01-0002', 20: 'Dummy-01-0004', 21: 'Dummy-01-0004', 22: 'Dummy-01-0005', 23: 'Dummy-01-0007', 24: 'Dummy-01-0008', 25: 'Dummy-01-0008', 26: 'Dummy-01-0010', 27: 'Dummy-01-0010', 28: 'Dummy-01-0011', 29: 'Dummy-01-0011', 30: 'Dummy-01-0013', 31: 'Dummy-01-0013', 32: 'Dummy-01-0014', 33: 'Dummy-01-0016', 34: 'Dummy-01-0016', 35: 'Dummy-01-0017', 36: 'Dummy-01-0017', 37: 'Dummy-01-0019'}, 'IDVAR': {0: 'AESEQ', 1: 'AESEQ', 2: 'AESEQ', 3: 'AESEQ', 4: 'AESEQ', 5: 'AESEQ', 6: 'AESEQ', 7: 'AESEQ', 8: 'AESEQ', 9: 'AESEQ', 10: 'AESEQ', 11: 'AESEQ', 12: 'AESEQ', 13: 'AESEQ', 14: 'AESEQ', 15: 'AESEQ', 16: 'AESEQ', 17: 'AESEQ', 18: 'AESPID', 19: 'AESPID', 20: 'AESPID', 21: 'AESPID', 22: 'AESPID', 23: 'AESPID', 24: 'AESPID', 25: 'AESPID', 26: 'AESPID', 27: 'AESPID', 28: 'AESPID', 29: 'AESPID', 30: 'AESPID', 31: 'AESPID', 32: 'AESPID', 33: 'AESPID', 34: 'AESPID', 35: 'AESPID', 36: 'AESPID', 37: 'AESPID'}, 'IDVARVAL': {0: '1.0', 1: '1.0', 2: '1.0', 3: '2.0', 4: '1.0', 5: '1.0', 6: '1.0', 7: '2.0', 8: '1.0', 9: '2.0', 10: '1.0', 11: '2.0', 12: '1.0', 13: '2.0', 14: '1.0', 15: '1.0', 16: '2.0', 17: '1.0', 18: '1', 19: '1', 20: '2', 21: '1', 22: '1', 23: '1', 24: '1', 25: '2', 26: '2', 27: '1', 28: '1', 29: '2', 30: '1', 31: '2', 32: '1', 33: '1', 34: '2', 35: '1', 36: '2', 37: '1'}, 'QNAM': {0: 'AEdummy1', 1: 'AEdummy1', 2: 'AEdummy1', 3: 'AEdummy1', 4: 'AEdummy1', 5: 'AEdummy1', 6: 'AEdummy1', 7: 'AEdummy1', 8: 'AEdummy1', 9: 'AEdummy1', 10: 'AEdummy1', 11: 'AEdummy1', 12: 'AEdummy1', 13: 'AEdummy1', 14: 'AEdummy1', 15: 'AEdummy1', 16: 'AEdummy1', 17: 'AEdummy1', 18: 'dummy2AE', 19: 'dummy2AE', 20: 'dummy2AE', 21: 'dummy2AE', 22: 'dummy2AE', 23: 'dummy2AE', 24: 'dummy2AE', 25: 'dummy2AE', 26: 'dummy2AE', 27: 'dummy2AE', 28: 'dummy2AE', 29: 'dummy2AE', 30: 'dummy2AE', 31: 'dummy2AE', 32: 'dummy2AE', 33: 'dummy2AE', 34: 'dummy2AE', 35: 'dummy2AE', 36: 'dummy2AE', 37: 'dummy2AE'}, 'QVAL': {0: '2012-02-15', 1: '2012-02-23', 2: '2012-02-06', 3: '2012-03-10', 4: '2012-03-10', 5: '2012-02-08', 6: '2012-03-18', 7: '2012-03-07', 8: '2012-02-01', 9: '2012-01-10', 10: '2012-01-19', 11: '2012-03-28', 12: '2012-02-19', 13: '2012-02-14', 14: '2012-03-13', 15: '2012-03-08', 16: '2012-02-05', 17: '2012-03-18', 18: 'Gastrointestinal disorders', 19: 'Nervous system disorder', 20: 'Gastrointestinal disorders', 21: 'Nervous system disorder', 22: 'Gastrointestinal disorders', 23: 'Vascular disorders', 24: 'Gastrointestinal disorders', 25: 'Vascular disorders', 26: 'Nervous system disorder', 27: 'Gastrointestinal disorders', 28: 'Nervous system disorder', 29: 'Nervous system disorder', 30: 'Nervous system disorder', 31: 'Gastrointestinal disorders', 32: 'Gastrointestinal disorders', 33: 'Vascular disorders', 34: 'Gastrointestinal disorders', 35: 'Nervous system disorder', 36: 'Nervous system disorder', 37: 'Vascular disorders'}})

구조를 조금 이해합시다. IDVAR 은 변수 명을 보유 하고 IDVARVAL 은 해당 값을 보유하고, QNAM 은 다른 변수 명을 보유 하고 QVAL 은 해당 값을 보유합니다. 이 구조는 내가 작업중인 도메인에서 정규화 된 구조라고합니다. 그래도 이상하다는 것을 알고 있습니다. 이 데이터를 다음 형식으로 얻고 싶습니다.

         USUBJID   AESEQ AESPID    AEdummy1      dummy2AE
0  Dummy-01-0001   1.0      1      2012-02-15    Gastrointestinal disorders
1  Dummy-01-0002   1.0      1      2012-02-23    Nervous system disorder
2  Dummy-01-0004   1.0      2      2012-02-06    Gastrointestinal disorders
3  Dummy-01-0004   2.0      1      2012-03-10    Nervous system disorder
4  Dummy-01-0005   1.0      1      2012-03-10    Gastrointestinal disorders

QNAM과 QVAL에 대해서만해야한다면 문제 없습니다. 다음과 같이 pandas의 피벗을 사용하여 쉽게 할 수 있습니다.

df.pivot(
        index=['USUBJID', 'IDVARVAL', 'IDVAR'], 
         columns='QNAM', 
         values='QVAL'
).reset_index()

이 문제에 대해서도 일종의 마스킹을 사용할 수 있지만이 데이터에는 수천 또는 때로는 수백만 개의 레코드가있을 것이기 때문에 이것이 가장 효율적인 방법이 아닐 것임을 알고 있습니다.

참고 : IDVAR에 대한 USUBJID 및 IDVARVAL의 조합은 QNAM에 대한 QVAL 값에 매핑되어야합니다. 즉, AESEQ, AESPID, AEdummy1 및 dummy2AE에 대한 일부 레코드는 NAN이거나 출력 DataFrame에 대해 비어있을 수 있습니다. 즉, 위 샘플의 경우 Dummy-01-0001 및 AESEQ = 1.0AEdummy1 = 2012-02-15를 고유하게 식별합니다.

Shubham Sharma

우리가 함께 해보자 unstacking다음 concat:

s  = df.set_index([df.groupby('IDVAR').cumcount(), 'USUBJID'])
s1 = s.set_index('IDVAR', append=True)['IDVARVAL'].unstack()
s2 = s.set_index('QNAM',  append=True)['QVAL'].unstack()

out = pd.concat([s1, s2], axis=1).reset_index(level=1)

설명

데이터 프레임을 그룹화 IDVAR하고 사용 cumcount하여 순차 카운터를 만들어 IDVAR그룹당 행을 고유하게 식별 한 다음이 카운터를 열과 함께 USUBJID데이터 프레임의 인덱스로 설정합니다.

>>> s
                  IDVAR  IDVARVAL      QNAM                        QVAL
  USUBJID                                                              
0 Dummy-01-0001   AESEQ       1.0  AEdummy1                  2012-02-15
1 Dummy-01-0002   AESEQ       1.0  AEdummy1                  2012-02-23
2 Dummy-01-0004   AESEQ       1.0  AEdummy1                  2012-02-06
3 Dummy-01-0004   AESEQ       2.0  AEdummy1                  2012-03-10
4 Dummy-01-0005   AESEQ       1.0  AEdummy1                  2012-03-10
0 Dummy-01-0001  AESPID       1.0  dummy2AE  Gastrointestinal disorders
1 Dummy-01-0002  AESPID       1.0  dummy2AE     Nervous system disorder
2 Dummy-01-0004  AESPID       2.0  dummy2AE  Gastrointestinal disorders
3 Dummy-01-0004  AESPID       1.0  dummy2AE     Nervous system disorder
4 Dummy-01-0005  AESPID       1.0  dummy2AE  Gastrointestinal disorders

이제 각각의 컬럼 IDVARVALQVAL해당 컬럼을 추가하여 인덱스 업데이트 IDVARQNAM다음 unstack바꿀를 :

>>> s1

  IDVAR          AESEQ  AESPID
  USUBJID                     
0 Dummy-01-0001    1.0     1.0
1 Dummy-01-0002    1.0     1.0
2 Dummy-01-0004    1.0     2.0
3 Dummy-01-0004    2.0     1.0
4 Dummy-01-0005    1.0     1.0

>>> s2

  QNAM             AEdummy1                    dummy2AE
  USUBJID                                              
0 Dummy-01-0001  2012-02-15  Gastrointestinal disorders
1 Dummy-01-0002  2012-02-23     Nervous system disorder
2 Dummy-01-0004  2012-02-06  Gastrointestinal disorders
3 Dummy-01-0004  2012-03-10     Nervous system disorder
4 Dummy-01-0005  2012-03-10  Gastrointestinal disorders

마지막으로, concat위의 스택되지 않은 프레임 s1s2함께 axis=1원하는 결과를 얻으십시오.

>>> out

         USUBJID  AESEQ  AESPID    AEdummy1                    dummy2AE
0  Dummy-01-0001    1.0     1.0  2012-02-15  Gastrointestinal disorders
1  Dummy-01-0002    1.0     1.0  2012-02-23     Nervous system disorder
2  Dummy-01-0004    1.0     2.0  2012-02-06  Gastrointestinal disorders
3  Dummy-01-0004    2.0     1.0  2012-03-10     Nervous system disorder
4  Dummy-01-0005    1.0     1.0  2012-03-10  Gastrointestinal disorders

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

복잡한 데이터 프레임 구조를 비정규 화하는 방법은 무엇입니까?

분류에서Dev

Pandas 데이터 프레임의 부울 열 정보를 다른 데이터 프레임에 복사하는 방법은 무엇입니까?

분류에서Dev

Python Pandas 한 데이터 프레임의 날짜를 다른 데이터 프레임의 날짜와 비교하는 방법은 무엇입니까?

분류에서Dev

Pandas 데이터 프레임에서 데이터를 빠르게 정규화하는 방법은 무엇입니까?

분류에서Dev

Pandas 데이터 프레임에 범위 지정 조회를 적용하는 방법은 무엇입니까?

분류에서Dev

Pandas 다중 인덱스 데이터 프레임을 정규화하는 방법은 무엇입니까?

분류에서Dev

Pandas 데이터 프레임을 특정 방식으로 재구성하는 방법은 무엇입니까?

분류에서Dev

조건에 따라 Pandas 데이터 프레임의 행 값을 정렬하는 방법은 무엇입니까?

분류에서Dev

Pandas로 데이터 프레임 인덱스를 재정렬 / 정렬하는 방법은 무엇입니까?

분류에서Dev

동일한 구조를 가진 pandas 데이터 프레임의 사전을 반복하여 각 (row, col) 요소의 합계로 하나의 데이터 프레임을 생성하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

Pandas 데이터 프레임에서 두 번째를 설정하는 방법은 무엇입니까?

분류에서Dev

특정 조건으로 데이터 프레임을 반복하는 방법은 무엇입니까?

분류에서Dev

python pandas를 사용하여 데이터 프레임의 특정 열에 대한 % 기호를 제거하는 방법은 무엇입니까?

분류에서Dev

이 Pandas 데이터 프레임의 차이를 그룹화, 정렬 및 계산하는 방법은 무엇입니까?

분류에서Dev

두 열의 고유 한 조합으로 Pandas 데이터 프레임을 그룹화하는 방법은 무엇입니까?

분류에서Dev

Pandas에서 데이터 프레임의 특정 열에 각 고유 구성 요소에 대한 새 열을 만드는 방법은 무엇입니까?

분류에서Dev

pandas 데이터 프레임을 비 어휘로 정렬하는 방법은 무엇입니까?

분류에서Dev

Pandas 데이터 프레임 그룹을 반복하고 계층 적 조건을 적용하는 함수를 작성하는 방법은 무엇입니까?

분류에서Dev

Pandas 데이터 프레임을 반복하고 세 번째 열을 기준으로 특정 열을 비교하는 방법은 무엇입니까?

분류에서Dev

일관되지 않게 정렬 된 로그 파일 데이터를 Pandas 데이터 프레임에 추가하는 방법은 무엇입니까?

분류에서Dev

Redis에서 복잡한 데이터 구조를 저장하는 방법은 무엇입니까?

분류에서Dev

Pandas 데이터 프레임의 복잡한 조합을 기반으로 표시기를 만드는 방법

분류에서Dev

for 루프의 결과를 Pandas 데이터 프레임으로 변환하는 방법은 무엇입니까?

분류에서Dev

두 데이터 프레임에 정확히 동일한 열과 인덱스가있는 경우 다른 데이터 프레임의 조건을 일치시켜 한 데이터 프레임의 데이터를 그룹화하는 방법은 무엇입니까?

분류에서Dev

Pandas 데이터 프레임의 조건으로 이중 for 루프를 최적화하는 방법은 무엇입니까?

분류에서Dev

Pandas 데이터 프레임에서 숫자를 필터링하는 방법은 무엇입니까?

분류에서Dev

Pandas 데이터 프레임에서 행의 하위 집합을 조작하는 방법은 무엇입니까?

분류에서Dev

for 루프를 사용하여 특정 길이의 numpy 배열 (또는 pandas 데이터 프레임)을 만드는 방법은 무엇입니까?

분류에서Dev

for 루프를 피하고 Pandas 데이터 프레임을 올바르게 반복하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    복잡한 데이터 프레임 구조를 비정규 화하는 방법은 무엇입니까?

  2. 2

    Pandas 데이터 프레임의 부울 열 정보를 다른 데이터 프레임에 복사하는 방법은 무엇입니까?

  3. 3

    Python Pandas 한 데이터 프레임의 날짜를 다른 데이터 프레임의 날짜와 비교하는 방법은 무엇입니까?

  4. 4

    Pandas 데이터 프레임에서 데이터를 빠르게 정규화하는 방법은 무엇입니까?

  5. 5

    Pandas 데이터 프레임에 범위 지정 조회를 적용하는 방법은 무엇입니까?

  6. 6

    Pandas 다중 인덱스 데이터 프레임을 정규화하는 방법은 무엇입니까?

  7. 7

    Pandas 데이터 프레임을 특정 방식으로 재구성하는 방법은 무엇입니까?

  8. 8

    조건에 따라 Pandas 데이터 프레임의 행 값을 정렬하는 방법은 무엇입니까?

  9. 9

    Pandas로 데이터 프레임 인덱스를 재정렬 / 정렬하는 방법은 무엇입니까?

  10. 10

    동일한 구조를 가진 pandas 데이터 프레임의 사전을 반복하여 각 (row, col) 요소의 합계로 하나의 데이터 프레임을 생성하는 가장 좋은 방법은 무엇입니까?

  11. 11

    Pandas 데이터 프레임에서 두 번째를 설정하는 방법은 무엇입니까?

  12. 12

    특정 조건으로 데이터 프레임을 반복하는 방법은 무엇입니까?

  13. 13

    python pandas를 사용하여 데이터 프레임의 특정 열에 대한 % 기호를 제거하는 방법은 무엇입니까?

  14. 14

    이 Pandas 데이터 프레임의 차이를 그룹화, 정렬 및 계산하는 방법은 무엇입니까?

  15. 15

    두 열의 고유 한 조합으로 Pandas 데이터 프레임을 그룹화하는 방법은 무엇입니까?

  16. 16

    Pandas에서 데이터 프레임의 특정 열에 각 고유 구성 요소에 대한 새 열을 만드는 방법은 무엇입니까?

  17. 17

    pandas 데이터 프레임을 비 어휘로 정렬하는 방법은 무엇입니까?

  18. 18

    Pandas 데이터 프레임 그룹을 반복하고 계층 적 조건을 적용하는 함수를 작성하는 방법은 무엇입니까?

  19. 19

    Pandas 데이터 프레임을 반복하고 세 번째 열을 기준으로 특정 열을 비교하는 방법은 무엇입니까?

  20. 20

    일관되지 않게 정렬 된 로그 파일 데이터를 Pandas 데이터 프레임에 추가하는 방법은 무엇입니까?

  21. 21

    Redis에서 복잡한 데이터 구조를 저장하는 방법은 무엇입니까?

  22. 22

    Pandas 데이터 프레임의 복잡한 조합을 기반으로 표시기를 만드는 방법

  23. 23

    for 루프의 결과를 Pandas 데이터 프레임으로 변환하는 방법은 무엇입니까?

  24. 24

    두 데이터 프레임에 정확히 동일한 열과 인덱스가있는 경우 다른 데이터 프레임의 조건을 일치시켜 한 데이터 프레임의 데이터를 그룹화하는 방법은 무엇입니까?

  25. 25

    Pandas 데이터 프레임의 조건으로 이중 for 루프를 최적화하는 방법은 무엇입니까?

  26. 26

    Pandas 데이터 프레임에서 숫자를 필터링하는 방법은 무엇입니까?

  27. 27

    Pandas 데이터 프레임에서 행의 하위 집합을 조작하는 방법은 무엇입니까?

  28. 28

    for 루프를 사용하여 특정 길이의 numpy 배열 (또는 pandas 데이터 프레임)을 만드는 방법은 무엇입니까?

  29. 29

    for 루프를 피하고 Pandas 데이터 프레임을 올바르게 반복하는 방법은 무엇입니까?

뜨겁다태그

보관