首页 > 解决方案 > 将 3 列数据框转换为由范围定义的列的矩阵

问题描述

我有一个 3 列数据框。假设我的列是"doc""word""count",每行显示文档中某个单词的出现次数。

| doc | word | count |
+-----+------+-------+
|   0 |    0 |    10 |
|   0 |    7 |     2 |
|   0 |    4 |     5 |
|   1 |    2 |     5 |
+-----+------+-------+

我想将此数据框转换为具有行作为文档和列作为单词的矩阵,所以我执行以下操作:

matrix = pd.pivot_table(my_df, index="doc", columns="word", values="count", fill_value=0)

我得到的是一个有列的矩阵[0,2,4,7]。但是,我想要的是为我的列设置另一个范围,例如range(10): [0,1,2,3,4,5,6,7,8,9]. 后者最终会得到一些所有条目都为 0 的列,这就是我想要的。

我怎样才能做到这一点?

标签: pythonpandasdataframe

解决方案


您要求reindex

matrix = (pd.pivot_table(df, index="doc",
                        columns="word", 
                        values="count", fill_value=0)
            .reindex(range(10), axis=1, fill_value=0)
         )

输出:

word   0  1  2  3  4  5  6  7  8  9
doc                                
0     10  0  0  0  5  0  0  2  0  0
1      0  0  5  0  0  0  0  0  0  0

推荐阅读