Pandas를 사용하여 그룹에 따라 행의 여러 변수를 열로 전치

닷 트란

이것은 SAS를 사용하기 전에 대답 한 질문을 말합니다. SAS-행의 여러 변수를 열로 전치

새로운 것은 변수의 길이가 2가 아니라 다양하다는 것입니다. 다음은 그 예입니다.

   acct     la   ln  seq1  seq2
0  9999  20.01  100     1    10
1  9999  19.05    1     1    10
2  9999  30.00    1     1    10
3  9999  26.77  100     2    11
4  9999  24.96    1     2    11
5  8888  38.43  218     3    20
6  8888  37.53    1     3    20

내 원하는 출력은 다음과 같습니다.

   acct     la   ln  seq1  seq2    la0    la1  la2  la3  ln0  ln1  ln2
5  8888  38.43  218     3    20  38.43  37.53  NaN  NaN  218    1  NaN
0  9999  20.01  100     1    10  20.01  19.05   30  NaN  100    1    1
3  9999  26.77  100     2    11  26.77  24.96  NaN  NaN  100    1  NaN

SAS에서는 상당히 간단한 proc 요약을 사용할 수 있지만 더 이상 SAS를 사용할 수 없기 때문에 Python에서 수행하고 싶습니다.

나는 내 문제에 재사용 할 수있는 질문을 이미 해결했지만 내가 보지 못한 Pandas에 더 쉬운 옵션이 있는지 궁금합니다. 여기 내 해결책이 있습니다. 누군가가 더 빠른 접근 방식을 가지고 있다면 흥미로울 것입니다!

# write multiple row to col based on groupby

import pandas as pd
from pandas import DataFrame
import numpy as np 

data = DataFrame({
    "acct": [9999, 9999, 9999, 9999, 9999, 8888, 8888],
    "seq1": [1, 1, 1, 2, 2, 3, 3],
    "seq2": [10, 10, 10, 11, 11, 20, 20],
    "la": [20.01, 19.05, 30, 26.77, 24.96, 38.43, 37.53],
    "ln": [100, 1, 1, 100, 1, 218, 1]
    })

# group the variables by some classes
grouped = data.groupby(["acct", "seq1", "seq2"])

def rows_to_col(column, size):
    # create head and contain to iterate through the groupby values
    head = []
    contain = []
    for i,j in grouped:
        head.append(i)
        contain.append(j)

    # transpose the values in contain
    contain_transpose = []
    for i in range(0,len(contain)):
        contain_transpose.append(contain[i][column].tolist())

    # determine the longest list of a sublist
    length = len(max(contain_transpose, key = len))
    # assign missing values to sublist smaller than longest list
    for i in range(0, len(contain_transpose)):
        if len(contain_transpose[i]) != length:
            contain_transpose[i].append("NaN" * (length - len(contain_transpose[i])))

    # create columns for the transposed column values
    for i in range(0, len(contain)):
        for j in range(0, size):
            contain[i][column + str(j)] = np.nan

    # assign the transposed values to the column
    for i in range(0, len(contain)):
        for j in range(0, length):
            contain[i][column + str(j)] = contain_transpose[i][j]

    # now always take the first values of the grouped group
    concat_list = []

    for i in range(0, len(contain)):
        concat_list.append(contain[i][:1])

    return pd.concat(concat_list) # concate the list

# fill in column name and expected size of the column
data_la = rows_to_col("la", 4)
data_ln = rows_to_col("ln", 3)

# merge the two data frames together
cols_use = data_ln.columns.difference(data_la.columns)

data_final = pd.merge(data_la, data_ln[cols_use], left_index=True, right_index=True, how="outer")
data_final.drop(["la", "ln"], axis = 1)
CT Zhu

참고 :

In [58]:

print grouped.la.apply(lambda x: pd.Series(data=x.values)).unstack()
                    0      1   2
acct seq1 seq2                  
8888 3    20    38.43  37.53 NaN
9999 1    10    20.01  19.05  30
     2    11    26.77  24.96 NaN

과:

In [59]:

print grouped.ln.apply(lambda x: pd.Series(data=x.values)).unstack()
                  0  1   2
acct seq1 seq2            
8888 3    20    218  1 NaN
9999 1    10    100  1   1
     2    11    100  1 NaN

따라서:

In [60]:

df2 = pd.concat((grouped.la.apply(lambda x: pd.Series(data=x.values)).unstack(),
                 grouped.ln.apply(lambda x: pd.Series(data=x.values)).unstack()),
                keys= ['la', 'ln'], axis=1)
print df2
                   la              ln       
                    0      1   2    0  1   2
acct seq1 seq2                              
8888 3    20    38.43  37.53 NaN  218  1 NaN
9999 1    10    20.01  19.05  30  100  1   1
     2    11    26.77  24.96 NaN  100  1 NaN

유일한 문제는 열 인덱스가 MultiIndex. 원하지 않는 경우 다음과 같이 변환 할 수 있습니다 la0.....

df2.columns = map(lambda x: x[0]+str(x[1]), df2.columns.tolist())

어떻게 생각 하시는지 모르겠습니다. 그러나 SAS PROC TRANSPOSE더 나은 가독성을 위해 구문을 선호합니다 . Pandas구문은 간결하지만이 특별한 경우에는 가독성이 떨어집니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Pandas를 사용하여 조건에 따라 열의 문자열 값을 그룹화하고 선택합니다.

분류에서Dev

Pandas를 사용하여 n 번째 행마다 한 열에서 여러 열로 전치

분류에서Dev

스칼라를 사용하여 Spark의 DataFrame 단일 행을 열로 전치

분류에서Dev

열의 요소를 R의 그룹별로 여러 열로 전치

분류에서Dev

두 개의 열을 사용하여 데이터 프레임을 별개의 여러 그룹으로 분할 한 다음 각 그룹에서 PCA를 수행하고 PCA 수치를 플로팅합니다.

분류에서Dev

팬더를 사용하여 그룹 내 순위에 따라 새 열 만들기

분류에서Dev

여러 키를 사용하여 여러 열로 그룹화

분류에서Dev

열의 값에 따라 다른 함수를 사용하여 조건부로 그룹화 된 데이터 프레임을 집계합니다.

분류에서Dev

Dask를 사용하여 여러 열 및 집계에 의한 그룹화

분류에서Dev

Pandas를 사용하여 CSV 파일의 특정 위치에 여러 열 추가

분류에서Dev

`rlang` NSE를 사용하여 여러 변수로 그룹화

분류에서Dev

화면 너비에 따라 gridLayoutManager를 사용하여 recyclerview의 행과 열 수를 조정할 수 있습니까?

분류에서Dev

SAS 관측치를 문자열에 따라 여러 행으로 분할하는 방법은 무엇입니까?

분류에서Dev

Pandas-.apply ()를 사용하여 조건에 따라 행의 값 업데이트

분류에서Dev

R-열 조건 변경에 따라 변수를 그룹화하여 변수 증가

분류에서Dev

MySQL을 사용하여 열 값에 따라 행 수를 얻는 방법

분류에서Dev

함수를 사용하여 행의 요소에 따라 한 열의 모든 항목 바꾸기

분류에서Dev

실행중인 Office 버전에 따라 VBA를 사용하여 PowerPoint 라이브러리에 VBProject 참조를 자동으로 추가합니다.

분류에서Dev

여러 열에 따라 위치를 추가하는 SQL

분류에서Dev

Pandas를 사용하여 데이터를 별도의 배치로 그룹화

분류에서Dev

Python Pandas를 사용하여 한 열의 고유 한 개수를 찾기 위해 여러 열 그룹화

분류에서Dev

변수 조건에 따라 여러 행의 여러 값을 하나의 셀로 복사

분류에서Dev

조건에 따라 여러 행의 데이터를 단일 행으로

분류에서Dev

Pandas : ~ mask를 사용하여 여러 기준에 따라 데이터에서 행 필터링

분류에서Dev

Pandas를 사용하여 Python 그룹화 및 여러 열 집계

분류에서Dev

sed를 사용하여 변수 일치에 따라 줄을 바꾸는 방법

분류에서Dev

csv 파일 / pandas 데이터 프레임을 다른 열의 그룹화에 따라 여러 파일로 분할

분류에서Dev

이전에 재구성 된 인덱스 열에 따라 여러 변수 그룹의 모양을 변경합니다.

분류에서Dev

여러 인수를 변수로 사용하여 perl에서 exe 실행

Related 관련 기사

  1. 1

    Pandas를 사용하여 조건에 따라 열의 문자열 값을 그룹화하고 선택합니다.

  2. 2

    Pandas를 사용하여 n 번째 행마다 한 열에서 여러 열로 전치

  3. 3

    스칼라를 사용하여 Spark의 DataFrame 단일 행을 열로 전치

  4. 4

    열의 요소를 R의 그룹별로 여러 열로 전치

  5. 5

    두 개의 열을 사용하여 데이터 프레임을 별개의 여러 그룹으로 분할 한 다음 각 그룹에서 PCA를 수행하고 PCA 수치를 플로팅합니다.

  6. 6

    팬더를 사용하여 그룹 내 순위에 따라 새 열 만들기

  7. 7

    여러 키를 사용하여 여러 열로 그룹화

  8. 8

    열의 값에 따라 다른 함수를 사용하여 조건부로 그룹화 된 데이터 프레임을 집계합니다.

  9. 9

    Dask를 사용하여 여러 열 및 집계에 의한 그룹화

  10. 10

    Pandas를 사용하여 CSV 파일의 특정 위치에 여러 열 추가

  11. 11

    `rlang` NSE를 사용하여 여러 변수로 그룹화

  12. 12

    화면 너비에 따라 gridLayoutManager를 사용하여 recyclerview의 행과 열 수를 조정할 수 있습니까?

  13. 13

    SAS 관측치를 문자열에 따라 여러 행으로 분할하는 방법은 무엇입니까?

  14. 14

    Pandas-.apply ()를 사용하여 조건에 따라 행의 값 업데이트

  15. 15

    R-열 조건 변경에 따라 변수를 그룹화하여 변수 증가

  16. 16

    MySQL을 사용하여 열 값에 따라 행 수를 얻는 방법

  17. 17

    함수를 사용하여 행의 요소에 따라 한 열의 모든 항목 바꾸기

  18. 18

    실행중인 Office 버전에 따라 VBA를 사용하여 PowerPoint 라이브러리에 VBProject 참조를 자동으로 추가합니다.

  19. 19

    여러 열에 따라 위치를 추가하는 SQL

  20. 20

    Pandas를 사용하여 데이터를 별도의 배치로 그룹화

  21. 21

    Python Pandas를 사용하여 한 열의 고유 한 개수를 찾기 위해 여러 열 그룹화

  22. 22

    변수 조건에 따라 여러 행의 여러 값을 하나의 셀로 복사

  23. 23

    조건에 따라 여러 행의 데이터를 단일 행으로

  24. 24

    Pandas : ~ mask를 사용하여 여러 기준에 따라 데이터에서 행 필터링

  25. 25

    Pandas를 사용하여 Python 그룹화 및 여러 열 집계

  26. 26

    sed를 사용하여 변수 일치에 따라 줄을 바꾸는 방법

  27. 27

    csv 파일 / pandas 데이터 프레임을 다른 열의 그룹화에 따라 여러 파일로 분할

  28. 28

    이전에 재구성 된 인덱스 열에 따라 여러 변수 그룹의 모양을 변경합니다.

  29. 29

    여러 인수를 변수로 사용하여 perl에서 exe 실행

뜨겁다태그

보관