2017-12-24 3 views
2

두 개의 다른 유형의 열이 field 열에 쌓여있는 테이블이 있습니다 (속성 및 질문). question_1 및 question_2가 쌓인 상태를 유지하면서 그 성과 나이가 열이 될 수 있도록팬더 - 피벗 선택 행

+-------+------------+-------+ 
| id | field | value | 
+-------+------------+-------+ 
| 52394 | gender  | M  | 
| 52394 | age  | 24 | 
| 52394 | question_1 | 2  | 
| 52394 | question_2 | 1  | 
+-------+------------+-------+ 

나는 그것을 바꿀 싶습니다.

+-------+--------+-----+------------+-------+ 
| id | gender | age | field | value | 
+-------+--------+-----+------------+-------+ 
| 52394 | M  | 24 | question_1 |  2 | 
| 52394 | M  | 24 | question_2 |  1 | 
+-------+--------+-----+------------+-------+ 

방법에 대한 아이디어가 있으십니까?

필드는 성별이나 나이이고, 당신의 DF에 피벗 적용 등 DF1 저장 :

답변

3

이 내 전략이 될 것입니다. 필드가 성별 또는 연령이 아닌 df를 df2로 저장하십시오. 그런 다음 두 ID (df1 및 df2)를 병합하십시오. 여기에 내 전체 코드는 다음과 같습니다

import pandas as pd 
import sys 
if sys.version_info[0] < 3: 
    from StringIO import StringIO 
else: 
    from io import StringIO 

# Create df 
rawText = StringIO(""" 
    id  field  value 
52394 gender  M  
52394 age   24  
52394 question_1 2  
52394 question_2 1  
""") 
df = pd.read_csv(rawText, sep = "\s+") 
df1 = df[df['field'].isin(['gender','age'])] 
df1 = df1.pivot(index = 'id', columns = 'field', values = 'value').reset_index() 
df2 = df[~df['field'].isin(['gender','age'])] 
df1.merge(df2) 

결과는 다음과 같습니다

 id age gender  field value 
0 52394 24  M question_1  2 
1 52394 24  M question_2  1 
+0

완벽한, 정말 고마워요! – dsal1951

+0

당신은 @ dsal1951을 매우 환영합니다! 내가 도울 수있어서 기뻐요! – FatihAkici