2017-11-08 11 views
3

列の値を列ヘッダーにピボットしようとしていますが、残りのデータは維持しています。ここでは、私が探しているものに最も近いものと一緒に、私の完全なコードです。これで唯一の問題は、私はend列を維持する方法を見つけ出すことができないということです。パンダ:列を列にピボットする

import pandas as pd 

starts = pd.date_range(start = '1/1/2017', freq = '31d', periods = 4).tolist() 
ends = pd.date_range(start = '1/31/2017', freq = '31d', periods = 4).tolist() 

df = pd.DataFrame({ 'id':['XXX','XXX','XXX','XXX','YYY','YYY','YYY','YYY'], 
        'start': starts + starts, 
        'end': ends + ends, 
        'type':['car','car','car','car','truck','truck','truck','truck'] 
        }, columns = ['id','start','end','type']) 

オリジナルDATAFRAME:

id  start  end type 
0 XXX 2017-01-01 2017-01-31 car 
1 XXX 2017-02-01 2017-03-03 car 
2 XXX 2017-03-04 2017-04-03 car 
3 XXX 2017-04-04 2017-05-04 car 
4 YYY 2017-01-01 2017-01-31 truck 
5 YYY 2017-02-01 2017-03-03 truck 
6 YYY 2017-03-04 2017-04-03 truck 
7 YYY 2017-04-04 2017-05-04 truck 

私の最も近い現在のピボットの試み:

print df.pivot(index = 'start', columns = 'id', values = 'type').reset_index() 

電流出力:

id  start XXX YYY 
0 2017-01-01 car truck 
1 2017-02-01 car truck 
2 2017-03-04 car truck 
3 2017-04-04 car truck 

所望の出力:

 start   end XXX YYY 
0 2017-01-01 2017-01-31 car truck 
1 2017-02-01 2017-03-03 car truck 
2 2017-03-04 2017-04-03 car truck 
3 2017-04-04 2017-05-04 car truck 

ノー成功を収めて、thisthisの両方を試してみました。

ご協力いただければ幸いです。 set_indexとアンスタックを使用して

答えて

4

df.set_index(['start', 'end', 'id']).type.unstack().reset_index() 



id start  end   XXX YYY 
0 2017-01-01 2017-01-31 car truck 
1 2017-02-01 2017-03-03 car truck 
2 2017-03-04 2017-04-03 car truck 
3 2017-04-04 2017-05-04 car truck 
トリックです
+0

、感謝Vaishaliの! – pshep123

+0

インデックスとして "id"列名を削除する質問を少し更新しました。解決策は '.rename_axis(None、axis = 1)'を最後に追加することでした。 – pshep123

5
pd.pivot_table(df,index=['start','end'],columns='id',values='type',aggfunc='sum').reset_index() 
Out[1587]: 
id  start   end XXX YYY 
0 2017-01-01 2017-01-31 car truck 
1 2017-02-01 2017-03-03 car truck 
2 2017-03-04 2017-04-03 car truck 
3 2017-04-04 2017-05-04 car truck 
+0

ニース、pivot_tableが優先されるはずです – Vaishali

+0

@Vaishaliありがとう:-) – Wen

+0

@Vaishali - なぜピボットテーブルが好まれるのですか? – pshep123