我有一个数据框:
df = pd.DataFrame({'id':[1,2,3,4], 'val1':['21','22','3','35'],
'val2':['99',None,'91','67'], 'val3':['21','45','76','88']})
我想将以 val
开头的列的所有值合并到单个列中。
预期输出:
id val1 val2 val3 val
0 1 21 99 21 21,99,21
1 2 22 None 45 22,45
2 3 3 91 76 3,91,76
3 4 35 67 88 35,67,88
我尝试过的:
df['val'] = df['val1']+","+df['val2']+","+df['val3']
如果没有 Null 值,则效果很好,但如果行包含 None
,它会使整行 NaN
id val1 val2 val3 val
0 1 21 99 21 21,99,21
1 2 22 None 45 NaN
2 3 3 91 76 3,91,76
3 4 35 67 88 35,67,88
最佳答案
使用 apply
和 dropna
:
df['val'] = df[['val1', 'val2', 'val3']].apply(lambda x: ';'.join(x.dropna()), axis=1)
#alternative, thanks Jon Clements
#df['val'] = df.filter(regex='^val').apply(lambda x: ';'.join(x.dropna()), axis=1)
print (df)
id val1 val2 val3 val
0 1 21 99 21 21;99;21
1 2 22 None 45 22;45
2 3 3 91 76 3;91;76
3 4 35 67 88 35;67;88
如果性能很重要,替代方法是使用嵌套列表理解:
df['val'] = [';'.join(y for y in x if isinstance(y, str))
for x in df.filter(regex='^val').values]
关于python - 如何将字符串列与 Null 合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54906740/