Создать DataFrame панелей MultiIndex из словаря с ключами кортежа - PullRequest
0 голосов
/ 18 января 2019

Я бы хотел эффективно создать pandas DataFrame из словаря Python collection.Counter ... но есть дополнительное требование.

Счетчик словаря выглядит следующим образом:

(a, b) : 5
(c, d) : 7
(a, d) : 2

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

Результирующий DataFrame должен выглядеть следующим образом:

   b  d
a  5  2
c  0  7

Для больших данных я не хочу создавать фрейм данных с использованием метода роста df[a][b]= 5 и т. Д., Поскольку это невероятно неэффективно, так как создает копиюнового кадра данных каждый раз, когда такое расширение сделано (я позволю себе верить).

Возможно, правильный ответ - использовать массив numpy ?

Ответы [ 2 ]

0 голосов
/ 18 января 2019

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

pd.Series(d).unstack(fill_value=0)
Out[708]: 
   b  d
a  5  2
c  0  7

Входные данные

d={('a', 'b') : 5,
('c', 'd') : 7,
('a', 'd') : 2}
0 голосов
/ 18 января 2019

Я бы создал Series, используя MultiIndex.from_tuples, а затем unstack it.

keys, values = zip(*counter.items())
idx = pd.MultiIndex.from_tuples(keys)

pd.Series(values, index=idx).unstack(-1, fill_value=0)

   b  d
a  5  2
c  0  7

Используя DataFrame конструктор с stack:

pd.DataFrame(counter, index=[0]).stack().loc[0].T

     b    d
a  5.0  2.0
c  NaN  7.0
...