Q:

Перенос данных из MongoDB в DataFrame

Есть ли красивый быстрый способ сделать так:

В mongo есть коллекция "ингредиенты" - в ней только id и name, их количество фиксированно

 {_id: 1, name: "potatoes"},
 {_id: 2, name: "carrot"},
 {etc...}

и есть коллекция "блюда", в которой в поле типа list хранятся id всех ингредиентов для данного блюда. Количество блюд в базе - не ограничено. 

{_id:1,
name: "soup",
ingredients: [1, 2, 3]},
{_id:2,
name: "puree",
ingredients: [1, 4]},

Можно ли по-быстрому оптимизированными встроенными функциями сделать DataFrame, в котором колонками будут ингредиенты, индекс - названия блюд, и 0/1 в ячейках - в зависимости, есть или нет ингредиент в блюде - тип такого:

т.е. не for each in db.collection.find()... а по-нормальному...

A:

Воспользуйтесь sklearn.preprocessing.MultiLabelBinarizer.
Пример:
Исходный DF (думаю вам не составит труда создать такой DF):
In [3]: df
Out[3]:
   _id   name ingredients
0    1   soup   [1, 2, 3]
1    2  puree      [1, 4]

решение:
from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()

df = df.join(pd.DataFrame(mlb.fit_transform(df.pop('ingredients')),
                          columns=mlb.classes_,
                          index=df.index))

результат:
In [7]: df
Out[7]:
   _id   name  1  2  3  4
0    1   soup  1  1  1  0
1    2  puree  1  0  0  1

PS для того чтобы объединить две таблицы / коллекции в MongoDB, можно воспользоваться mongojoin

