如何将 DataFrame 列的非空条目合并到新列中?

我正在尝试创建一个新列,其中包含过去非空列的所有条目的列表。


我希望能够生成所需的列,而不必遍历每一行。


  col1   col2   col3   output       

  a      NaN    b      [a,b]        

  c      d      e      [c,d,e]      

  f      g      NaN    [f,g]        

任何帮助将不胜感激。


明月笑刀无情
浏览 227回答 3
3回答

慕田峪4524236

使用DataFrame.agg调用dropna和tolist:df.agg(lambda x: x.dropna().tolist(), axis=1)0       [a, b]1    [c, d, e]2       [f, g]dtype: object如果您需要逗号分隔的字符串,请使用str.cat或str.join:df.agg(lambda x: x.dropna().str.cat(sep=','), axis=1)# df.agg(lambda x: ','.join(x.dropna()), axis=1)0      a,b1    c,d,e2      f,gdtype: object如果性能很重要,我建议使用列表理解:df['output'] = [x[pd.notna(x)].tolist() for x in df.values]df  col1 col2 col3     output0    a  NaN    b     [a, b]1    c    d    e  [c, d, e]2    f    g  NaN     [f, g]这是有效的,因为您的 DataFrame 由字符串组成。

暮色呼如

使用 for 循环df['New']=[[y for y in x if y == y ] for x in df.values.tolist()]dfOut[654]:   col1 col2 col3        New0    a  NaN    b     [a, b]1    c    d    e  [c, d, e]2    f    g  NaN     [f, g]或stack与groupbydf['New']=df.stack().groupby(level=0).agg(list)dfOut[659]:   col1 col2 col3        New0    a  NaN    b     [a, b]1    c    d    e  [c, d, e]2    f    g  NaN     [f, g]

肥皂起泡泡

试试这个:df['output'] = df.apply(lambda x: x.dropna().to_list(), axis=1)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python