将元素列表转换为表格

时间:2017-11-02 21:00:10

标签: python

我有一个看起来像这样的元素列表(为了清楚写成表格)

ID  | OtherID
-------------
1     1
1     2
1     3
2     1
2     3

我想要转换为这样的表格,其中ID 1ID 2是上表中ID的值:

OtherID | ID 1 | ID 2
---------------------
1         True   True
2         True   False
3         True   True

最好的方法是什么? IDOtherID都来自数据库。如果它在数据库中做得更好,我很高兴任何建议。

更新 在评论中给出的@ 7yl4r的帮助下,我使用pandas实现了第一个版本:

import pandas as pd

data = [[1, 1],
        [1, 2],
        [2, 1],
        [2, 3],
        [3, 1],
        [3, 4]]

df = pd.DataFrame(data, columns=['ID', 'OtherId'])

table = df.pivot(index='OtherId', columns='ID', values='ID').fillna(0)
table[table > 0] = 1
table.replace({1: True, 0: False}, inplace=True)

print(table)

有没有使用熊猫的简单方法?

1 个答案:

答案 0 :(得分:1)

您可以使用此代码并调整/优化它以使用您的数据库

# input table format [(ID, OtherID), ...]
input_table = [
    {'ID': 1, 'OtherID': 1},
    {'ID': 1, 'OtherID': 2},
    {'ID': 1, 'OtherID': 3},
    {'ID': 2, 'OtherID': 1},
    {'ID': 2, 'OtherID': 3}
]

# get distinct list of ID
id_set = set([rec['ID'] for rec in input_table])

# get distinct list of OtherID
other_id_set = set([rec['OtherID'] for rec in input_table])

# create empty output_table
output_table = list()

# iterate over distinct other_id
for other_id in other_id_set:

    # create row with 'OtherID' column
    row = {'OtherID': other_id}

    # iterate over distinct id
    for id in id_set:

        # record { 'ID': id, 'OtherID': other_id } exists ?
        exists = False
        for rec in input_table:
            if rec['ID'] == id and rec['OtherID'] == other_id:
                exists = True
                break

        # add current ID column
        row['ID ' + str(id)] = exists

    # add row in output_table
    output_table.append(row)

# print result
print(output_table)