为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

明月笑刀无情 2021-12-29 19:24:10
我正在尝试创建一个新列,其中包含过去非空列的所有条目的列表。我希望能够生成所需的列,而不必遍历每一行。  col1   col2   col3   output         a      NaN    b      [a,b]          c      d      e      [c,d,e]        f      g      NaN    [f,g]        任何帮助将不胜感激。
查看完整描述

3 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

使用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,b

1    c,d,e

2      f,g

dtype: object

如果性能很重要,我建议使用列表理解:


df['output'] = [x[pd.notna(x)].tolist() for x in df.values]

df


  col1 col2 col3     output

0    a  NaN    b     [a, b]

1    c    d    e  [c, d, e]

2    f    g  NaN     [f, g]

这是有效的,因为您的 DataFrame 由字符串组成。


查看完整回答
反对 回复 2021-12-29
?
暮色呼如

TA贡献1853条经验 获得超9个赞

使用 for 循环


df['New']=[[y for y in x if y == y ] for x in df.values.tolist()]

df

Out[654]: 

  col1 col2 col3        New

0    a  NaN    b     [a, b]

1    c    d    e  [c, d, e]

2    f    g  NaN     [f, g]

或stack与groupby


df['New']=df.stack().groupby(level=0).agg(list)

df

Out[659]: 

  col1 col2 col3        New

0    a  NaN    b     [a, b]

1    c    d    e  [c, d, e]

2    f    g  NaN     [f, g]


查看完整回答
反对 回复 2021-12-29
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

试试这个:

df['output'] = df.apply(lambda x: x.dropna().to_list(), axis=1)


查看完整回答
反对 回复 2021-12-29
  • 3 回答
  • 0 关注
  • 222 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信