只添加带有值的列

2024-06-16 12:43:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个具有多个列的df,有时该列为空。我想concat只填充的列。现在我只是添加所有列,有很多空格

Num    Country   City
1        USA      
2               Philly

所以我想要第四个专栏

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

但这就是我得到的

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

Tags: citydfcountrynumtotal空格usaconcat
3条回答

你可以过滤掉空值

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

这里有一个替代解决方案,在方法上与@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

你也可以使用列表理解。它应该快速易读:

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]

相关问题 更多 >