我有一个包含多列的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
答案 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