Объедините столбцы фрейма данных и заполните пустые цифры нулем

У меня есть фрейм данных pandas с двумя столбцами, первый из которых называется «Письма» и содержит две буквы (например, AB), а другой, озаглавленный «Числа», имеет числа (от 1 до 9999). Теперь я хочу объединить их, чтобы первая строка с «Буквы» = XY и «Числа» = 4 стала XY0004, в основном гарантируя, что обе ячейки объединены, но числовая ячейка имеет дополнительные 0 нулей. Ряд 2 с ZW и 333 станет ZW0333. Строка 3 с AB и 1234 станет AB1234. Как я могу сделать это хорошо?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
475
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Пытаться:

df['New Col'] = df.apply(lambda row: row['Letters'] + str(row['Numbers']).zfill(4), axis=1)

Это изменит ваш DataFrame, чтобы включить новый столбец.

Я получаю SyntaxError: неверный синтаксис

Huebschi 08.04.2019 20:38

@Huebschi Ты уверен? В моей консоли работает нормально. Где ваша трассировка говорит о SyntaxError?

Luke Ning 08.04.2019 20:40
Ответ принят как подходящий

Используйте панды astype для преобразования int в str и используйте zfill для добавления ведущих нулей:

# Example dataframe
df = pd.DataFrame({'Letters':['AB', 'XY', 'ZW'],
                   'Numbers': [1234, 4, 333]})

print(df)
  Letters  Numbers
0      AB     1234
1      XY        4
2      ZW      333

df['Merged'] = df['Letters'] + df['Numbers'].astype(str).str.zfill(4)

print(df)
  Letters  Numbers  Merged
0      AB     1234  AB1234
1      XY        4  XY0004
2      ZW      333  ZW0333

Редактировать после того, как OP прокомментировал, что у него есть floats в виде числовых значений.
Как предложил ChrisA, используйте следующее:

df['Merged'] = df['Letters'] + df['Numbers'].astype(int).astype(str).str.zfill(4)

print(df)
  Letters  Numbers  Merged
0      AB   1234.0  AB1234
1      XY      4.0  XY0004
2      ZW    333.0  ZW0333

Спасибо за полный ответ. Это работает, единственная проблема, которая у меня есть, это то, что я получаю этот AB1234.0. Как мне избавиться от .0?

Huebschi 08.04.2019 20:42

@Huebschi, может быть, нужно df['Letters'] + df['Numbers'].astype(int).astype(str).str.zfill(4) избавиться от десятичной дроби?

Chris Adams 08.04.2019 20:56

Что говорит ChrisA. Судя по всему, у вас вместо float число типов integers. См. редактирование для решения @Huebschi

Erfan 08.04.2019 20:59

Да, это сработало, большое спасибо. Извините за мое невежество :)

Huebschi 08.04.2019 21:13

Другие вопросы по теме