转置多维表

时间:2013-03-11 23:48:22

标签: python pandas

我正在通过一大堆PDF解析我的方式,并根据它们所属的模块提取硬件地址列表。我们的想法是构建一个依赖关系图,这将有助于将来任何代码转换。 由于问题非常大,我使用pandas作为主要的数据库API,因为它很容易将功能应用于列。

数据库 数据库包含两个字段,即地址和模块名称(见下文)。 每个记录详细说明单个(和唯一)地址的成员资格,其中包含其成员的模块。 “关联模块”字段的类型为“列表”,可以包含不同数量的元素。但是Address只有一个值。

问题 理想情况下,使用优化的Pandas API,如何将下面的“RawTable”转换为 “依赖表”?代码示例非常感谢。

<Current Database>
xxxxx*[Pandas::RawTable]******
* Address * Associate Modules *
******************************
*   1000  * ["1A","2A","3A"] *
*   1001  * ["2A","4A","5A"] *
*   1002  *   ["1A", "4A"]   *
******************************

<Future Database>
******[Pandas:: DependencyTable****
* Associate Modules *   Address   *
***********************************
*     "1A"         *     1000     *
*     "1A"         *     1002     *
*     "2A"         *     1000     *
*     "2A"         *     1001     *
*     "3A"         *     1000     *
*     "4A"         *     1001     *
*     "4A"         *     1002     *
*     "5A"         *     1001     *
***********************************

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

看起来模块作为一列列表加载。

In [1]: df = DataFrame(
        {'Address': [1000, 1001, 1002],
        'Associate Modules': [['1A', '2A', '3A'],
                              ['2A', '4A', '5A'], 
                              ['1A', '4A']]})

我首先将相关模块拆分为单独的列。

In [2]: modules = df['Associate Modules'].apply(Series)
In [3]: modules.index = df['Address']
In [4]: modules
Out[4]: 
          0   1    2
Address             
1000     1A  2A   3A
1001     2A  4A   5A
1002     1A  4A  NaN

然后堆叠DataFrame,并删除我们的虚拟列索引。

In [5]: result = modules.stack()
In [6]: result.index = result.index.get_level_values(0)

In [7]: result
Out[7]: 
Address
1000       1A
1000       2A
1000       3A
1001       2A
1001       4A
1001       5A
1002       1A
1002       4A

如果要将Address作为正确的列而不是索引,请使用reset_index()方法。可能有一种更时尚的方式,但不是太难看。

相关问题