对不起,如果以前已经回答过,但是我在解决问题上遇到了问题。
我有一个带有列名的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对象。
答案 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]