2017-10-05 43 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

这里的操作词是猜测。 @罗莎亚历杭德拉,如果你说“这不起作用:(”,那么你应该明白这是因为你没有把你的问题陈述与数据清楚,所以你强迫用户在黑暗中拍摄。 –