2016-10-04 1 views
0

У меня есть Dataframe, который имеет 2 колонки, я пытаюсь создать новый столбец column3 с логикой конкатенации значений column1 (String) и column2 (межд) с разделитель ('_').Попытка объединить строку с целым числом, но нежелательных значений становится добавлен

Ниже приведены несколько начальные значения dataframe:

column1 column2 
    0 Andy  1 
    1 Ashok 4 
    2 Collins 7 

Ниже приведены мои несколько попыток:

df['column3'] = df['column1'].apply(lambda x: x + '_' + str(df['column2'])) 

df['column3'] = df['column1'] + '_' + str(df['column2']) 

df['column3'] = pd.Series(df['column1']).str.cat(str(df['column2']), sep='_') 

Ниже результат:

0  Andy_0  2\n1  2\n2  1\n3  ... 
1  Ashok_0  2\n1  2\n2  1\n3 ... 
2  Collins_0  2\n1  2\n2  1\n3 ... 

Но (2\n1 2\n2 1\n3 ...) добавляется в значение столбца result3, и только одно значение zero (0) добавляется t o столбец результатов3.

Пожалуйста, дайте мне знать, где все становится не так?

ответ

1

Вам не нужно делать это настолько сложным. поддержка dataframe такая операция:

df.column1 + "_" + df.column2.astype("str") 
+0

спасибо большое, ваше решение сработало !!! – Soumyaansh

0

Вы хотите:

def concat_cols(row): 
    return "{}_{}".format(row['column1'], row['column2']) 

df['column3'] = df.apply(concat_cols, axis = 1) 

Ключевой аспект axis = 1, который смотрит на dataframe строчной, а не по столбцам. В вашем коде выше df['column2'] в функции лямбда ссылался на весь столбец, а не только на значение строки.

Смежные вопросы