10

Объединение двух столбцов текста в DataFrame pandas

39

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

Year  quarter
2000       q2
2001       q3

Как мне добавить новый столбец, объединив существующие столбцы, чтобы получить следующий DataFrame?

Year  quarter  period
2000       q2  2000q2
2001       q3  2001q3

Как правильно это сделать с использованием pandas?

5 ответ(ов)

12

Если оба столбца являются строками, вы можете просто конкатенировать их:

df["period"] = df["Year"] + df["quarter"]

Если один (или оба) столбца не имеют строковый тип, вам нужно сначала выполнить преобразование в строку:

df["period"] = df["Year"].astype(str) + df["quarter"]

Осторожно с NaN при выполнении этой операции!


Если вам нужно объединить несколько строковых столбцов, вы можете использовать agg:

df['period'] = df[['Year', 'quarter', ...]].agg('-'.join, axis=1)

Здесь "-" является разделителем.

0

Вы можете использовать лямбда-функцию вместе с string.format() для создания нового столбца в DataFrame, объединив значения из нескольких существующих столбцов. Вот пример такого использования в библиотеке Pandas:

import pandas as pd

# Создаем DataFrame с годами и кварталами
df = pd.DataFrame({'Year': ['2014', '2015'], 'Quarter': ['q1', 'q2']})
print(df)

# Применяем лямбда-функцию для объединения года и квартала
df['YearQuarter'] = df[['Year', 'Quarter']].apply(lambda x: '{}{}'.format(x[0], x[1]), axis=1)
print(df)

Результат будет следующим:

  Quarter  Year
0      q1  2014
1      q2  2015
  Quarter  Year YearQuarter
0      q1  2014      2014q1
1      q2  2015      2015q2

Этот подход позволяет работать не только со строками, но и с различными типами данных. Вот еще один пример, где кварталы представлены в числовом формате:

import pandas as pd

# Создаем DataFrame с годами и числовыми кварталами
df = pd.DataFrame({'Year': ['2014', '2015'], 'Quarter': [1, 2]})
print(df.dtypes)
print(df)

# Используем лямбда-функцию для объединения года и квартала
df['YearQuarter'] = df[['Year', 'Quarter']].apply(lambda x: '{}q{}'.format(x[0], x[1]), axis=1)
print(df)

Вывод будет таким:

Quarter     int64
Year       object
dtype: object
   Quarter  Year
0        1  2014
1        2  2015
   Quarter  Year YearQuarter
0        1  2014      2014q1
1        2  2015      2015q2

Таким образом, вы можете легко формировать строки из различных типов данных, что предоставляет гибкость в обработке и форматировании значений в DataFrame.

0

Если вы хотите обобщить код для объединения нескольких столбцов в один, то можно использовать следующий подход:

columns = ['whatever', 'columns', 'you', 'choose']
df['period'] = df[columns].astype(str).agg(' '.join, axis=1)

Этот код конвертирует указанные столбцы в строковый формат и объединяет их с помощью пробела. Вы можете изменить ' '.join на любое другое разделение, если это необходимо. Например, если вы хотите использовать запятую, просто замените на ', '.join.

Также следует учитывать, что этот метод позволяет корректно обрабатывать NaN значения, которые будут заменены на пустые строки в процессе конкатенации. Если вам нужно, чтобы NaN значения не влияли на результат, вы можете использовать метод fillna до выполнения объединения:

df[columns] = df[columns].fillna('')
df['period'] = df[columns].agg(' '.join, axis=1)

Таким образом, вы получите строку, содержащую значения из всех указанных столбцов для каждой строки, без потери информации из-за NaN.

0

Вы можете использовать лямбда-функцию следующим образом:

combine_lambda = lambda x: '{}{}'.format(x.Year, x.quarter)

Затем вы можете применить эту функцию для создания нового столбца в вашем DataFrame:

df['period'] = df.apply(combine_lambda, axis=1)

Таким образом, в столбце 'period' у вас будет объединённое значение года и квартала для каждой строки.

0

Чтобы создать DataFrame с колонками Year и Quarter, вы можете использовать следующий код:

import pandas as pd
df = pd.DataFrame({'Quarter': 'q1 q2 q3 q4'.split(), 'Year': '2000'})

После выполнения этого кода ваш DataFrame будет выглядеть так:

df
>>>  Quarter    Year
   0    q1      2000
   1    q2      2000
   2    q3      2000
   3    q4      2000

Теперь, если вы хотите объединить колонки Year и Quarter, вы можете добавить новый столбец Period следующим образом:

df['Period'] = df['Year'] + ' ' + df['Quarter']

Теперь, если вы выведете df, он будет выглядеть так:

df
>>>  Quarter    Year    Period
    0   q1      2000    2000 q1
    1   q2      2000    2000 q2
    2   q3      2000    2000 q3
    3   q4      2000    2000 q4

Если вы хотите убрать пробел между годом и кварталом, просто удалите его:

df['Period'] = df['Year'] + df['Quarter']

Теперь столбец Period будет содержать значения без пробела:

df
>>>  Quarter    Year    Period
    0   q1      2000    2000q1
    1   q2      2000    2000q2
    2   q3      2000    2000q3
    3   q4      2000    2000q4

Таким образом, вы успешно создали новый столбец с объединёнными значениями из двух других колонок.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь