в предыдущей ветке, блестящий ответ был задан следующей проблемой (Pandas: reshaping data). Цель состоит в том, чтобы изменить ряд панд, содержащий списки в панде dataframe следующим образом:python dataframe - функция лямбда X - возможна более эффективная реализация?
In [9]: s = Series([list('ABC'),list('DEF'),list('ABEF')])
In [10]: s
Out[10]:
0 [A, B, C]
1 [D, E, F]
2 [A, B, E, F]
dtype: object
должен быть придан так:
Out[11]:
A B C D E F
0 1 1 1 0 0 0
1 0 0 0 1 1 1
2 1 1 0 0 1 1
То есть dataframe создается где каждый элемент в списках серии становится столбец. Для каждого элемента в серии создается строка в фрейме данных. Для каждого элемента в списках 1 присваивается соответствующему столбцу данных (и 0 в противном случае). Я знаю, что формулировка может быть громоздкой, но, надеюсь, приведенный выше пример ясен.
Блестящая реакция пользователя Jeff (https://stackoverflow.com/users/644898/jeff) должен был написать этот простой, но мощный строку кода:
In [11]: s.apply(lambda x: Series(1,index=x)).fillna(0)
Это превращает [10] в [11 отъезда].
Эта строка кода служила мне очень хорошо, однако я столкнулся с проблемами памяти с серией примерно 50 тыс. Элементов и около 100 тыс. Различных элементов во всех списках. Моя машина имеет 16 ГБ памяти. Прежде чем прибегать к более крупной машине, я хотел бы подумать о более эффективной реализации вышеприведенной функции.
Кто-нибудь знает, как повторно реализовать эту строку:
In [11]: s.apply(lambda x: Series(1,index=x)).fillna(0)
, чтобы сделать его более эффективным, с точки зрения использования памяти?
Как генерируется оригинальная серия? Лучше всего избегать наличия в нем списков. – chrisb
хорошо вопрос. к сожалению, сериал создается с помощью утилизации - я не могу с этим поделать - я унаследовал набор данных от клиента. –