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

#python #dataframe

#python #фрейм данных

Вопрос:

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

Ниже приведены несколько начальных значений фрейма данных:

     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       2n1       2n2       1n3     ...
1       Ashok_0       2n1       2n2       1n3    ...
2       Collins_0       2n1       2n2       1n3  ...
  

Но ( 2n1 2n2 1n3 ... ) добавляется к значению результирующего столбца3, и только одно нулевое значение (0) добавляется к результирующему столбцу3.

Пожалуйста, дайте мне знать, где что-то не так?

Ответ №1:

вам не нужно делать это таким сложным. фрейм данных поддерживает такую операцию:

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

Ответ №2:

Вы хотите это:

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

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

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