Добавление нескольких столбцов в фрейм данных и пропуск пустых значений - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть такой фрейм данных:

s = {'B1': ['1C', '3A', '41A'], 'B2':['','1A','28A'], 'B3':['','','3A'],
     'B1_m':['2','2','2'], 'B2_m':['2','4','2'],'B3_m':['2','2','4'], 
     'E':['0','0','0']}
s = DataFrame(s)
print(s)

    B1   B2  B3 B1_m B2_m B3_m  E
0   1C             2    2    2  0
1   3A   1A        2    4    2  0
2  41A  28A  3A    2    2    4  0

и я добавляю эти несколько столбцов в новый столбец Results в следующем формате:

s['Results'] = s['B1']+s['B1_m']+'-'+s['B2']+s['B2_m']+'-'+s['B3']+s['B3_m']+'-'+s['E']
print(s)

    B1   B2  B3  B1_m  B2_m  B3_m   E            Results
0   1C              2     2     2   0          1C2-2-2-0
1   3A   1A         2     4     2   0        3A2-1A4-2-0
2  41A  28A  3A     2     2     4   0    41A2-28A2-3A4-0

Но я хочу пропустить элемент, если в B1-B3 есть пустое значение, например:

    B1   B2  B3  B1_m  B2_m  B3_m   E            Results
0   1C              2     2     2   0              1C2-0
1   3A   1A         2     4     2   0          3A2-1A4-0
2  41A  28A  3A     2     2     4   0    41A2-28A2-3A4-0

Есть ли способы условно пропустить это пустое значение?
Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Использование numpy.where - самый питонический способ, который я могу решить, чтобы решить эту проблему:

import numpy as np

s['Results'] = s['B1']+s['B1_m'] + \
                  np.where(s['B2'], '-'+s['B2']+s['B2_m'], "") + \
                  np.where(s['B3'], '-'+s['B3']+s['B3_m'], "") +'-'+s['E']

Получит нужные вам результаты:

print(s)
    B1   B2  B3 B1_m B2_m B3_m  E          Results
0   1C             2    2    2  0            1C2-0
1   3A   1A        2    4    2  0        3A2-1A4-0
2  41A  28A  3A    2    2    4  0  41A2-28A2-3A4-0

(Обратите внимание, что \ требуется для вставки разрыва строки во время длинного оператора).

0 голосов
/ 19 ноября 2018

Один из способов - str.replace однозначных чисел с использованием регулярных выражений и столбцов конкатов E как:

s['Results'] = s['Results'].str.replace(r'\b\-[0-9]\b','')+'-'+s['E']

Или:

s['Results'] = s['Results'].str.replace(r'\b\-\d\b','')+'-'+s['E']

print(s)
    B1   B2  B3 B1_m B2_m B3_m  E          Results
0   1C             2    2    2  0            1C2-0
1   3A   1A        2    4    2  0        3A2-1A4-0
2  41A  28A  3A    2    2    4  0  41A2-28A2-3A4-0

Если цифры больше одной, используйте:

s['Results'] = s['Results'].str.replace(r'\b\-\d+\b','')+'-'+s['E']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...