pandas仅添加值的列

时间:2018-05-02 19:50:03

标签: python pandas

我有一个包含多列的df,有时列是null。我想连接仅填充的列。现在我只是添加所有列并有很多空格。

Num    Country   City
1        USA      
2               Philly

所以我希望第4列是

Num    Country   City  Total
1        USA             1,USA
2               Philly   2,Philly 

但这就是我得到的

Num    Country   City  Total
1        USA             1,USA, 
2               Philly   2, ,Philly 

3 个答案:

答案 0 :(得分:1)

您也可以使用列表推导。它应该快速可读:

df['total'] = [', '.join([j for j in i.astype(str) if j != '']) for i in df.values]

以下是一个完整的例子:

import pandas as pd

data = '''\
Num,Country,City
1,USA,
2,,Philly
'''

df = pd.read_csv(pd.compat.StringIO(data)).fillna('')

cols = ['Num','Country','City']

df['total'] = [', '.join([j for j in i.astype(str) if j != '']) for i in df[cols].values]

答案 1 :(得分:0)

您可以过滤掉空值。

df.apply(lambda row: ", ".join(row[i] for i in df.columns if ~pd.isnull(row[i])]),
         axis=1)

答案 2 :(得分:0)

这是一个替代解决方案,类似于@AntonvBR的方法,但在机制方面略有不同:

df['total'] = [', '.join(list(filter(None, i))) for i in df.values.astype(str)]

   Num Country    City      total
0    1     USA             1, USA
1    2          Philly  2, Philly