使用熊猫中包含数组的单元格将数据框转换为系列

时间:2018-11-10 23:15:37

标签: python pandas dataframe series

对不起,如果以前已经回答过,但是我在解决问题上遇到了问题。

我有一个带有列名的2D DataFrame,其中的元素同时包含非null和null值。我想将2D数据框“展平”为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开始,该DataFrame具有带有时间戳记“行”的多个重复属性。在任何给定的时间戳记下,行中的信息都可以添加,删除。我曾使用df.where()返回唯一值的数据帧,并试图将其展平为每行一个'ids'属性集合。

实际上,示例表来自单个GroupBy对象。

1 个答案:

答案 0 :(得分:1)

使用dict理解实例化一个新系列(这应该比基于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]