2016-09-17 79 views
1

我有以下通式結構之「長」格式大熊貓據幀:大熊貓結合行和維護列順序

id,date,color,size,density 
1,201201,val1,val2,val3 
1,201301,val1,val2,val3 
1,201301,val1,val2,val3 
2,201201,val1,val2,val3 
2,201202,val1,val2,val3 

新的「寬」的格式,我希望創造的是:

id,color_1,size_1,density_1,color_2,size_2,density_2,color_3,size_3,density_3 
1,val1,val2,val3,val1,val2,val3,val1,val2,val3 
2,val1,val2,val3,val1,val2,val3 

其中保留了列的原始行順序,但現在按照id將單行中的升序日期按順序排列。當我嘗試使用pd.pivot變體時,它不保留列順序。也許是concat方法?任何建議是受歡迎的。

UPDATE:

我做了這方面的一些進展使這裏是我的新的基礎數據幀:

id, date, feature_vector (parens for clarity, not in data, comma seperated string field) 
1,2012-01-01,(0,1,0,0,0,1) 
1,2013-01-01,(0,0,1,0,0,1) 
1,2013-01-02,(0,1,0,1,0,1) 
2,2012-01-11,(0,1,0,0,1,1) 
2,2012-02-11,(0,1,1,0,0,1) 

我試圖創建以下文件:

id, feature_vector 
1,(0,1,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,1) 
2,(0,1,0,0,1,1,0,1,1,0,0,1) 

我只是試圖按照日期順序連接特徵向量。

回答

1

你可以使用concat方法,但是我試着製作你的長數據框,並且發現它在你的玩具例子中很笨重和脆弱。我會建議使用groupby方法。

grouped = df.sort('date', ascending=True).groupby('id') 

如果你需要級聯的版本,試試這個:

columns = ['date', 'color', 'size', 'density'] 

first = grouped.nth(0) 
first = first[columns] 
first.rename(columns=lambda x: '{}_1'.format(x), inplace=True) 

second = grouped.nth(1) 
second = second[columns] 
second.rename(columns=lambda x: '{}_2'.format(x), inplace=True) 

new_df = pd.concat([first, second], axis=1) 
+0

不幸的是,一個GROUPBY沒有得到我,我需要在這裏我想。這些值不會被聚合,「.sort」已被棄用。 – Pylander

+0

我一直在修改這個做了更新。我認爲這應該是一個更簡單的問題。讓我知道你的想法,如果你會如此善良。感謝你的協助。 – Pylander

+0

你可以使用sort_values方法,它會有相同的行爲。你知道你是如何在一個單一的ID? –