2013-03-11 6 views
0

В настоящее время я разбираю свой путь через большой набор PDF-файлов и извлекает список аппаратного адреса на основе того, к какому модулю они принадлежат. Идея состоит в том, чтобы построить диаграмму зависимости, которая поможет любому будущему обращению кода. Из-за очень большой природы проблемы я использую pandas в качестве основного API баз данных, так как его очень просто применить функцию к столбцу.Передать многомерную таблицу

База данных База данных состоит из двух полей, а именно: Адрес и имя модуля (см. Ниже). Где каждая запись содержит сведения о членстве в одном (и уникальном) адресе по отношению к модулю, членом которого он является. Поле Associate Modules имеет тип List и может иметь различное количество элементов. Однако адрес имеет только одно значение.

Задача В идеале, используя оптимизированный API Pandas, как я могу преобразовать нижний «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  * 
*********************************** 

Благодарим за помощь.

ответ

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 

Если вы хотите Адрес в качестве собственной колонки вместо индекса, используйте метод reset_index(). Вероятно, более гладкий способ, но не слишком уродлив.

Смежные вопросы