Python Pandas: multi-index unstack taking forever

Python Pandas: multi-index unstack taking forever

我从 .csv 文件中读取了一个 DataFrame,其中包含以下列:

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 a 得到这个错误:ValueError: Index contains duplicate entries, cannot reshape

有没有人有其他选择或知道为什么要花这么长时间? 我还没有看到结果,也没有看到任何错误。

我相信你拆错了关卡。因为在设置索引时有 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