Как изменить поля строки на заголовок столбца в Python? - PullRequest
1 голос
/ 03 октября 2019

Мои данные в формате ниже

<table>
<tbody>
    <tr><th>A</th><th>B</th><th>C</th><th>D</th></tr>
    <tr><td>1</td><td>2</td><td>3</td><td>4</td></tr>
    <tr><td>2</td><td>1</td><td>3</td><td>2</td></tr>
    <tr><td>3</td><td>4</td><td>2</td><td>1</td></tr>
    <tr><td>4</td><td>2</td><td>1</td><td>3</td></tr>
</tbody>
</table>

Я хочу преобразовать его в следующий формат:

<table>
<tbody>
    <tr><th>1</th><th>2</th><th>3</th><th>4</th></tr>
    <tr><td>A</td><td>A</td><td>A</td><td>A</td></tr>
    <tr><td>B</td><td>B</td><td>C</td><td>B</td></tr>
    <tr><td>C</td><td>B</td><td>C</td><td>D</td></tr>
    <tr><td>D</td><td>C</td><td>D</td><td> </td></tr>
    <tr><td> </td><td>D</td><td> </td><td> </td></tr>
</tbody>
</table>

Я пытался использовать сводную таблицу Excel, сводную таблицу Python, но не смог получить желаемый результат.

Не могли бы вы мне помочь, пожалуйста?

Спасибо, Насер

1 Ответ

1 голос
/ 03 октября 2019

Попробуйте приведенный ниже код. Надеюсь, что это поможет:

import pandas as pd
df = pd.DataFrame({'A':[1,2,3,4],'B':[2,1,3,2],'C':[3,4,2,1],'D':[4,2,1,3]});
data = {'A':[1,2,3,4],'B':[2,1,3,2],'C':[3,4,2,1],'D':[4,2,1,3]}

Преобразование данных в требуемый формат.

new_data = dict()
for key, value in data.items():
    for data1 in value:
        if data1 in new_data.keys():
            if key in new_data[data1]:
                pass
            else:
                new_data[data1].append(key)
        else:
            new_data[data1]=[key]

Если длина значений для каждого ключа, если не будет одинаковой, то панды не будут создаватьдатафрейм для словаря пройден. Следовательно, в этом случае необходимо преобразовать длину значения в значение, равное 4.

for key ,value in new_data.items():
    dif =  4 - len(value)
    new_data[key] = value + [None]*dif

Выход данных будет:

new_data

{1: ['A', 'B', 'C', 'D'],
 2: ['A', 'B', 'C', 'D'],
 3: ['A', 'B', 'C', 'D'],
 4: ['A', 'C', 'D', None]}

Теперь преобразуем его в кадр данных:

    1   2   3   4
0   A   A   A   A
1   B   B   B   C
2   C   C   C   D
3   D   D   D   None
...