将数据帧转换为包含Pandas中数组的单元格的系列



很抱歉之前已经回答过这个问题,但我的解决方案有问题。

我有一个带有列名的2D DataFrame,其中的元素包含非null值和null值。我想将2D DataFrame"展平"为1D系列,在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()返回了一个具有唯一值的数据帧,并试图将其扁平化为每行一个"id"的属性集合。

在实践中,示例表来自单个GroupBy对象。

使用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]

最新更新