将列合并为新列时出现数组格式意外

时间:2019-02-28 22:48:50

标签: python pandas dataframe

我在数据框中有3列:

df:

A |B|C
hi| |dear

为了将它们合并到新的D列中,我这样做了:

df['D'] = [[x, y, z] for x, y, z in zip(df.A, df.B, df.C)]

不幸的是,结果看起来像这样:[hi, ,dear]

如何通过本质上删除空值(和关联的逗号),然后将其余的值与空格或破折号相连,将其格式化为[hi dear][hi-dear]

感谢您的帮助!

谢谢。

2 个答案:

答案 0 :(得分:2)

apply是一种方便的工具,可将简单功能应用于数据框的所有行。在这里,您可以使用空格字符连接各列,并用单个空格替换任意数量的空格。代码可能是:

import re

blanks = re.compile(' +')
df['D'] = df.apply(lambda x: blanks.sub(' ', ' '.join(x)), axis=1)

df将如预期的那样:

    A B     C        D
0  hi    dear  hi dear

答案 1 :(得分:0)

自从标记pandas

df.mask(df=='').stack().groupby(level=0).apply('+'.join).tolist()
['hi+dear']