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愉快的编码!