2017-12-24 14 views
2

私は2つの異なる種類の列が属性と質問のfield列に積み重ねられたテーブルを持っています。パンダ - 唯一のピボット選択行

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

question_1とquestion_2が積み重なっている間に、性別と年齢が列になるように再構成したいと考えています。

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

どのようにすればいいですか?

答えて

3

これが私の戦略のようになります。

はDF1として保存し、フィールドには性別や年齢であるあなたのDFにピボットを適用します。フィールドが性別または年齢でないdfを選択し、df2として保存します。次に、2つ(df1とdf2)をidにマージします。ここに私の完全なコードは次のとおりです。

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

関連する問題