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
,所以新索引中的第一个值就是它原来的值(您没有指出这个索引值是什么,所以我只是假设一个从零开始的连续范围)。接下来的两个级别将是 Year
和 month
.
所以,试试这个来获得你想要的输出:
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
我从 .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
,所以新索引中的第一个值就是它原来的值(您没有指出这个索引值是什么,所以我只是假设一个从零开始的连续范围)。接下来的两个级别将是 Year
和 month
.
所以,试试这个来获得你想要的输出:
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