Python 新列作为其他列的列表,但不带NAN

Python 新列作为其他列的列表,但不带NAN,python,pandas,list,numpy,Python,Pandas,List,Numpy,基本上,我有这样的数据帧: c1 c2 0 a x 1 b NaN c1 c2 c 0 a x [a, x] 1 b NaN [b] 我希望列c如下: c1 c2 0 a x 1 b NaN c1 c2 c 0 a x [a, x] 1 b NaN [b] 以下是我的解决方案: import pandas as pd import

基本上,我有这样的数据帧:

  c1   c2    
0  a    x  
1  b  NaN  
  c1   c2       c
0  a    x  [a, x]
1  b  NaN     [b]

我希望列
c
如下:

  c1   c2    
0  a    x  
1  b  NaN  
  c1   c2       c
0  a    x  [a, x]
1  b  NaN     [b]

以下是我的解决方案:

import pandas as pd
import numpy as np

df = pd.DataFrame({'c1': ['a', 'b'], 'c2': ['x', np.nan]})

df['c'] = df[['c1', 'c2']].values.tolist()
df['c'] = df['c'].apply(lambda x: [i for i in x if i is not np.nan])
但我认为存在一些更短、更简单、更泛化的东西。 你能帮我弄一个班轮吗

df["c"] = df.apply(lambda x: x[x.notna()].tolist(), axis=1)
print(df)
印刷品:

c1c
0a x[a,x]
1 b南[b]

让我们尝试使用
stack
groupby

df['c'] = df.stack().groupby(level=0).agg(list)
使用
列表
理解的替代方法

df['c'] = [v[pd.notna(v)] for v in df.values]


谢谢我非常喜欢列表理解的列表解决方案,删除NAN是显式的。@QuantChristo愉快的编码!