Преобразование кадра данных в серию с ячейками, содержащими массивы в Pandas - PullRequest
0 голосов
/ 11 ноября 2018

Извините, если на этот вопрос уже был дан ответ, но у меня возникли проблемы с решением.

У меня есть 2D DataFrame с именами столбцов, где элементы содержат как ненулевые, так и нулевые значения. Я бы хотел «сгладить» 2D DataFrame для серии 1D, где я сохраняю только ненулевые данные в виде списка в ячейке серии с соответствующим заголовком.

то есть: следующее:

Исходя из (наберите pandas.Dataframe):

| asset | name | id |
---------------------
| a     | john | 001|
| a     | NaN  | 002|
| NaN   | dave | 003|

Кому (тип pandas.Series):

| asset | name         | id              |
------------------------------------------
| [a]   | [john, dave] | [001, 002, 003] |

Спасибо!

РЕДАКТИРОВАТЬ: Зачем мне это нужно:

Я начинаю с большого DataFrame, который имеет несколько дублированных атрибутов с помеченными временными метками «строками». В любой данный момент времени информация в строках может быть добавлена, удалена. Я использовал df.where(), чтобы вернуть фрейм данных с уникальными значениями, и пытаюсь свести его к одной коллекции атрибутов 'ids' на строку.

На практике пример таблицы взят из одного объекта GroupBy.

1 Ответ

0 голосов
/ 11 ноября 2018

Создайте новую серию, используя диктовку (это должно быть быстрее, чем решение на основе apply).

pd.Series({c : df[c].dropna().unique().tolist() for c in df.columns})

asset             [a]
name     [john, dave]
id          [1, 2, 3]
dtype: object

Если вы хотите использовать однорядный DataFrame, используйте

pd.Series(
    {c : df[c].dropna().unique().tolist() for c in df.columns}
).to_frame().T

  asset          name         id
0   [a]  [john, dave]  [1, 2, 3]
...