Python: как объединить несколько списков с одинаковыми типами переменных в один список списков? - PullRequest
0 голосов
/ 04 февраля 2020

Как объединить три списка списков в один, чтобы первые строки списков второго уровня появлялись в первой строке нового списка списков, а соответствующие вторые строки - в следующих строках (по одной строке для каждого списка) ?

Допустим, есть три списка списков, которые выглядят следующим образом:

[['item_1', 'price_100'], ['item_2', 'price_200']] #from shop_a
[['item_1', 'price_120'], ['item_2', 'price_180']] #from shop_b
[['item_2', 'price_80'], ['item_3', 'price_220']] #from shop_c

Я хотел бы объединить их в один список списков, например:

[['item_name', 'shop_a', 'shop_b', 'shop_c'], #should become the header of the DataFrame
['item_1', 'price_100', 'price_120', ''], #should become the 1st row of the DF
['item_2', 'price_200', 'price_180', 'price_80'], #should become the 2nd row of the DF
['item_3', '', '', 'price_220']] #should become the 3rd row of the DF

Идея состоит в том, чтобы получить все цены на один и тот же товар в каждой строке, чтобы построенный из списка DataFrame представлял удобную матрицу для сравнения цен в разных магазинах.

Как это сделать? Буду признателен за любое предложение ...

PS: Пожалуйста, учтите, что строки не равны по длине (третий список отличается от первых двух).

1 Ответ

2 голосов
/ 04 февраля 2020

Вы можете сохранить их в dictionary, используя имя элемента в качестве ключа, затем отсортировать их по алфавиту и создать df, например, это:

import pandas as pd


a = [['item_1', 'price_100'], ['item_2', 'price_200']] #from shop_a
b = [['item_1', 'price_120'], ['item_2', 'price_180']] #from shop_b
c = [['item_2', 'price_80'], ['item_3', 'price_220']] #from shop_c

data = {}
for item in a + b + c:
    item_name = item[0]
    item_price = item[1]
    item_data = data.get(item_name, ['', '', ''])
    item_data.append(item_price)
    item_data.pop(0)
    data[item_name] = item_data

sorted_rows = sorted([
    [item_data[0]]+item_data[1] for item_data in data.items()
], key=lambda item: item[0])

df = pd.DataFrame(sorted_rows, columns=['item_name', 'shop_a', 'shop_b', 'shop_c'])
print(df)

>>>
  item_name     shop_a     shop_b     shop_c
0    item_1             price_100  price_120
1    item_2  price_200  price_180   price_80
2    item_3                        price_220

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...