Преобразование списков в диагональную матрицу DataFrame

Мне возвращается список кортежей в таком формате:

[date1, date2, date3]
[ticker1, ticker2, ticker3]
[value1, value2, value3]

Я хочу преобразовать его в фреймворк pandas, где индекс - это даты, столбцы - тикеры, а данные - значения.

Можете ли вы показать нам (визуально), что вы хотите получить в качестве желаемого результата?

jpp 21.05.2018 18:36

То, что вы здесь показали, не является списком кортежей. Это три отдельных списка. Не могли бы вы подробнее рассказать о данных, с которыми вы работаете?

Metropolis 21.05.2018 18:38

Это не список кортежей, это список списков (по крайней мере, вы дали нам поверить).

cs95 21.05.2018 18:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
160
3

Ответы 3

Series и unstack

lst = [['date1', 'date2', 'date3'],
       ['ticker1', 'ticker2', 'ticker3'],
       ['value1', 'value2', 'value3']]

pd.Series(lst[-1], lst[:2]).unstack()

      ticker1 ticker2 ticker3
date1  value1    None    None
date2    None  value2    None
date3    None    None  value3

defaultdict

from collections import defaultdict

lst = [['date1', 'date2', 'date3'],
       ['ticker1', 'ticker2', 'ticker3'],
       ['value1', 'value2', 'value3']]

dd = defaultdict(dict)

for d, t, v in zip(*lst):
    dd[t][d] = v

pd.DataFrame(dd)

      ticker1 ticker2 ticker3
date1  value1    None    None
date2    None  value2    None
date3    None    None  value3

Использование pivot

df=pd.DataFrame(lst).T
df.pivot(*df)

1     ticker1 ticker2 ticker3
0                            
date1  value1    None    None
date2    None  value2    None
date3    None    None  value3

Идея распаковки нравится, супер лаконично.

cs95 21.05.2018 18:57
(lambda d: d.pivot(*d))(pd.DataFrame(lst).T) ИЛИ pd.DataFrame(lst).T.pipe(lambda d: d.pivot(*d))
piRSquared 21.05.2018 18:58
values = [(1, 0, 1), (2, 9, 4), (3, 10, 4), (9, 22, 30)]

data_frame = pd.DataFrame(values)
print(data_frame)

Мне нужно было бы увидеть ваш конкретный код, потому что то, что вы обрисовали, похоже на список списков, а не список кортежей. Но теоретически, если бы у вас был список кортежей, вы бы создали из него DataFrame. Вот ваш результат:

   0   1   2
0  1   0   1
1  2   9   4
2  3  10   4
3  9  22  30

Это ответ на другой вопрос, не так ли?

cs95 21.05.2018 19:54

@coldspeed Нет. Если у вас есть другой вопрос, вы можете задать его.

Simeon Ikudabo 21.05.2018 21:44

Спасибо, но я не думаю, что вы поняли. Я думаю, что ваш ответ решает другую проблему, которую OP не задавал.

cs95 21.05.2018 21:54

Другие вопросы по теме