Объединение строк в Python, игнорирующих разделитель, если есть пустая строка - PullRequest
0 голосов
/ 08 июня 2018

У меня есть Pandas DataFrame, который содержит строки и пустые строки.

Пример данных

col_A | col_B | col_C  
----- | ----- | -----  
 'a'  |  'b'  |  'c'  
      |       |  'c'  
 'a'  |       |  'c'  
 'a'  |  'b'  |        

Я хочу объединить столбцы таким образом, чтобы игнорировать разделитель, если есть пробелСтрока такая, что мои результаты выглядят так, как показано ниже

| 'a;b;c' | 
| 'c'     |
| 'a;c'   |
| 'a;b'   |

Я попробовал следующее

df.apply(lambda x: ';'.join(x), axis=1)

Но я получаю

| 'a;b;c' |  
| ';;c'   |
| 'a;;c'  |
| 'a;b;'  |

Просмотр других сообщенийбыть похожей проблемы, я пытался

df.apply(lambda x: ';'.join(filter(None,df)), axis=1)

Но это дало мне

| 'a;b;c' |  
| 'a;b;c' | 
| 'a;b;c' | 
| 'a;b;c' | 

Есть ли способ объединить столбцы таким образом, что игнорирует разделитель, если есть пустая строка

Ответы [ 3 ]

0 голосов
/ 08 июня 2018

Вы можете использовать str.cat (Это будет пропускать значение NaN.)

#df=df.replace({'':np.nan})
df.apply(lambda x : x.str.cat(sep=';'),1)
Out[113]: 
0    a;b;c
1        c
2      a;c
3      a;b
dtype: object
0 голосов
/ 09 июня 2018

Попробуйте этот код:

df.apply(lambda x: ';'.join(x[x!='']), axis=1)
Out: 
0    a;b;c
1        c
2      a;c
3      a;b
dtype: object
0 голосов
/ 08 июня 2018

Вы можете удалить NaN с dropna:

df.apply(lambda x: ';'.join(x.dropna()), axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...