Объединяет выбранные столбцы панды, игнорируя при этом пробелы в столбцах - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть фрейм данных, который выглядит следующим образом.

key A1 A2 A3 BX CX DX
1   X1 Y1    B1 C1 D1
2   X2    Z2 B2 C2 D2
3   X3       B3 C3 D3
4   X4       B4 C4 D4
5            B5 C5 D5

Я пытаюсь сформировать новый столбец 'NC', который объединяется из столбцов A1, A2 и A3.Если в определенном столбце нет записи, следующий столбец необходимо сделать шаг вперед. Разделителем может быть «,» или «_»

Конечный df выглядит как

key A1 A2 A3 BX CX DX NC
1   X1 Y1    B1 C1 D1 X1_Y1
2   X2    Z2 B2 C2 D2 X2_Z2
3   X3       B3 C3 D3 X3
4   X4       B4 C4 D4 X4
5            B5 C5 D5 

Если в A1-A3 нет записей, то запись в NC остается пустой. Я просматривал другие сообщения в SO и пробовал другие способы, но, похоже, я не понял, как это правильно.Записи в столбцах A1-A3 являются числами с плавающей запятой, которые иногда имеют 0 после числа (X2.0).Я также хочу отбросить десятичную дробь, и 0. Надеясь, что кто-то более знающий может показать мне путь.

edit Q, чтобы изменить тип данных во фрейме данных

key A1  A2  A3  BX CX DX 
1   1.0 2.0     B1 C1 D1
2   3    4      B2 C2 D2
3   7.0         B3 C3 D3
4   5   6.0 7.0 B4 C4 D4
5               B5 C5 D5

new df выглядит так

key A1  A2  A3  BX CX DX NC
1   1.0 2.0     B1 C1 D1 1_2
2   3    4      B2 C2 D2 3_4
3   7.0         B3 C3 D3 7
4   5   6.0 7.0 B4 C4 D4 5_6_7
5               B5 C5 D5 

1 Ответ

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

Вы можете использовать filter для фильтрации ваших столбцов и agg для присоединения:

# Extract columns
v = df.filter(like='A')
# Convert blanks to NaNs so we can call Series.dropna later.
df['NC'] = v[v.astype(bool)].agg(lambda x: '_'.join(x.dropna()), axis=1)
# Or,
# df['NC'] = v[v.astype(bool)].agg(
#                lambda x: x.dropna().str.cat(sep='_'), axis=1)
print(df) 
   key  A1  A2  A3  BX  CX  DX     NC
0    1  X1  Y1      B1  C1  D1  X1_Y1
1    2  X2      Z2  B2  C2  D2  X2_Z2
2    3  X3          B3  C3  D3     X3
3    4  X4          B4  C4  D4     X4
4    5              B5  C5  D5       
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...