Скажем, у меня есть фрейм данных следующей формы
Код: Выделить всё
d1 = str([{"Alice": "1/2"}, {"Bob": "3/11"}, {"Charlotte": "5/2"}])
d2 = str([{"Bob": "2/7"}, {"Daniel": "4/5"}])
d3 = str([{"Emily": "12/5"}])
d4 = str([{"Bob":"4/11"}, {"Victor":"2/2"}, {"Bob":"5/6"}])
df = pd.DataFrame([d1, d2, d3, d4], columns = ['visits'])
Я думаю, что каждая строка в df соответствует палате в клинике, и каждый словарь содержит имя пациента, который был в этой палате, и день, когда он там был. Я хочу создать новый столбец для каждого пациента, в котором будет подсчитываться, сколько раз каждый пациент был в каждой палате (т. е. сколько словарей в столбце имеют это имя в качестве ключа), поэтому он должен выглядеть так:
Код: Выделить всё
df_desired = pd.DataFrame([[d1, 1, 1, 1, 0, 0, 0], [d2, 0, 1, 0, 1, 0 , 0], [d3, 0, 0, 0, 0, 1, 0], [d4, 0, 2, 0 ,0, 0, 1]], columns = ['visits', 'Alice', 'Bob', 'Charlotte', 'Daniel', 'Emily', 'Victor'])
Как это реализовать? Важно отметить, что я априори не знаю, кем будут все пациенты (то есть ключи в словаре). Я знаю, что это было бы относительно просто сделать с помощью итерации по строкам, но я знаю, что одно из золотых правил Pandas заключается в том, что итерация по строкам никогда не является правильным ответом, поскольку производительность действительно низкая.