2017-10-05 32 views
2

我從以下各列的.csv文件中讀取一個數據框:Python的熊貓:多指標拆散到永遠

columns = ['Year', 'month', 'column1', 'column2','column3', 'column4', 'column5', 'column6', 'column7', 'column8','Value'] 

數據框有116408行,但df = df.drop_duplicates()後,它現在有98829(我不「知道爲什麼它在首位重複)

我要拆散它是這樣的:

      1    2    3    .... 
         2016 2017 2018 2016 2017 2018 2016 2017 2018 .... 
column1 column2 ....... 
    a1  a2 ...  24 12 20 22 15 21 12 11 13 ... 
    b1  b2 ...  18 11 21 21 11 31 14 41 14 ... 

到目前爲止,我已經試過:

df = df.set_index(columns[:-1], append=True) 
df = df.unstack(level=[0,1]) 

但這需要永遠。 (如果我刪除append一個得到這個錯誤:ValueError: Index contains duplicate entries, cannot reshape

有沒有人有另一種選擇或任何想法,爲什麼它需要這麼久? 我還沒有看到結果,也沒有任何錯誤。

+0

也許'df.to_dict(10)'和粘貼在這裏輸出,所以我們可以複製你的數據嗎? –

+3

我有想法。但是,我猜測。我不想花時間猜測。你可以通過提供樣本數據來解決這個問題。對你的好處是你可以提高獲得更高質量答案的機會。 – piRSquared

+0

我們無法幫助您...直到看到數據.. – Wen

回答

3

我相信你是抨擊錯誤的水平。因爲在設置索引時您有append=True,所以新索引中的第一個值就是它(無法指示此索引值是什麼,因此我只是假設從零開始的連續範圍)。接下來的兩個級別將是Yearmonth

所以,試試這個,讓您所需的輸出:

df.unstack(level=[1, 2]) 

np.random.seed(0) 
columns = ['Year', 'month', 'column1', 'column2', 'column3', 'column4', 'column5', 'column6', 'column7', 'column8','Value'] 
df = pd.DataFrame(np.random.randn(99, 11), columns=columns) 
df.loc[:, 'Year'] = [2016, 2017, 2018] * 33 
df.loc[:, 'month'] = [1, 2, 3] * 33 

>>> df.set_index(columns[:-1], append=True).unstack(level=[1,2]).head() 
                         Value \ 
Year                     2016 
month                      1 
    column1 column2 column3 column4 column5 column6 column7 column8    
0 0.978738 2.240893 1.867558 -0.977278 0.950088 -0.151357 -0.103219 0.410599 0.144044 
1 0.121675 0.443863 0.333674 1.494079 -0.205158 0.313068 -0.854096 -2.552990  NaN 
2 2.269755 -1.454366 0.045759 -0.187184 1.532779 1.469359 0.154947 0.378163  NaN 
3 0.156349 1.230291 1.202380 -0.387327 -0.302303 -1.048553 -1.420018 -1.706270 1.950775 
4 -1.252795 0.777490 -1.613898 -0.212740 -0.895467 0.386902 -0.510805 -1.180632  NaN 

                          \ 
Year                     2017 
month                      2 
    column1 column2 column3 column4 column5 column6 column7 column8    
0 0.978738 2.240893 1.867558 -0.977278 0.950088 -0.151357 -0.103219 0.410599  NaN 
1 0.121675 0.443863 0.333674 1.494079 -0.205158 0.313068 -0.854096 -2.552990 0.653619 
2 2.269755 -1.454366 0.045759 -0.187184 1.532779 1.469359 0.154947 0.378163  NaN 
3 0.156349 1.230291 1.202380 -0.387327 -0.302303 -1.048553 -1.420018 -1.706270  NaN 
4 -1.252795 0.777490 -1.613898 -0.212740 -0.895467 0.386902 -0.510805 -1.180632 -0.028182 


Year                     2018 
month                      3 
    column1 column2 column3 column4 column5 column6 column7 column8    
0 0.978738 2.240893 1.867558 -0.977278 0.950088 -0.151357 -0.103219 0.410599  NaN 
1 0.121675 0.443863 0.333674 1.494079 -0.205158 0.313068 -0.854096 -2.552990  NaN 
2 2.269755 -1.454366 0.045759 -0.187184 1.532779 1.469359 0.154947 0.378163 -0.887786 
3 0.156349 1.230291 1.202380 -0.387327 -0.302303 -1.048553 -1.420018 -1.706270  NaN 
4 -1.252795 0.777490 -1.613898 -0.212740 -0.895467 0.386902 -0.510805 -1.180632  NaN 
+2

這裏的操作詞是猜測。 @羅莎亞歷杭德拉,如果你說「這不起作用:(」,那麼你應該明白這是因爲你沒有把你的問題陳述與數據清楚,所以你強迫用戶在黑暗中拍攝。 –