2014-04-19 23 views
1

我有以下形式一個數據幀:自加盟熊貓:合併所有行具有同等多指標

df = pd.read_csv('data/original.csv', sep = ',', names=["Date", "Gran", "Country", "Region", "Commodity", "Type", "Price"], header=0) 

我試圖做一個自我對指數日加入,大,國家,生產行的格式爲 日期,格蘭,國家,地區,商品X,類型X,價格X,商品Y,類型Y,優惠價格Y,商品Z,類型Z,價格Z

每行應該包含全部特定區域的不同商品和價格。

有沒有簡單的方法來做到這一點?

任何幫助非常感謝!


注:我忽略的幾個屬性

簡化的例子

輸入示例:

 Date   Country Region   Commodity Price 
1  03/01/2014 India Vishakhapatnam  Rice  25 
2  03/01/2014 India Vishakhapatnam  Tomato  30 
3  03/01/2014 India Vishakhapatnam  Oil  50 
4  03/01/2014 India Delhi    Wheat  10 
5  03/01/2014 India Delhi    Jowar  60 
6  03/01/2014 India Delhi    Bajra  10 

輸出例:

 Date   Country Region   Commodit1 Price1 Commodity2 Price2 Commodity3 Price3 
1  03/01/2014 India Vishakhapatnam  Rice  25  Tomato 30  Oil  50 
2  03/01/2014 India Delhi    Wheat  10  Jowar  60  Bajra  10 
+1

你能展示一個你擁有的數據和期望的輸出結果的例子嗎?你有沒有看過'merge'和'join'函數(http://pandas.pydata.org/pandas-docs/stable/merging.html#database-style-dataframe-joining-merging)? – joris

+0

@joris我確實看過熊貓加入,但這並沒有多大幫助。我目前正試圖在sql中重寫我的問題,因爲我是熊貓新手,這可能會幫助我解決問題。我添加了一個示例,以便您可以看到我正在嘗試執行的操作。感謝您的幫助和時間! – user3551674

回答

1

你想要做什麼是所謂的重塑(特別是從長到寬)。有關更多信息,請參閱this answer

不幸的是,據我所知,熊貓沒有一個簡單的方法來做到這一點。我適應在其他線程的回答你的問題:

df['idx'] = df.groupby(['Date','Country','Region']).cumcount() 
df.pivot(index= ['Date','Country','Region'], columns='idx')[['Commodity','Price']] 

這是否解決問題了嗎?

+0

你發給我的帖子正是我要找的。非常感謝!然而,當試圖實現你建議的代碼時,我得到了以下錯誤:ValueError:長度不匹配:期望軸有19918個元素,新值有3個元素。你有什麼想法可能是什麼錯誤?我知道19918是我的表格在輸入表單中的行數。 – user3551674

相關問題