Объединение двух столбцов текста в DataFrame pandas
У меня есть DataFrame, который выглядит следующим образом:
Year quarter
2000 q2
2001 q3
Как мне добавить новый столбец, объединив существующие столбцы, чтобы получить следующий DataFrame?
Year quarter period
2000 q2 2000q2
2001 q3 2001q3
Как правильно это сделать с использованием pandas?
5 ответ(ов)
Если оба столбца являются строками, вы можете просто конкатенировать их:
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)
Здесь "-" является разделителем.
Вы можете использовать лямбда-функцию вместе с 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.
Если вы хотите обобщить код для объединения нескольких столбцов в один, то можно использовать следующий подход:
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.
Вы можете использовать лямбда-функцию следующим образом:
combine_lambda = lambda x: '{}{}'.format(x.Year, x.quarter)
Затем вы можете применить эту функцию для создания нового столбца в вашем DataFrame:
df['period'] = df.apply(combine_lambda, axis=1)
Таким образом, в столбце 'period' у вас будет объединённое значение года и квартала для каждой строки.
Чтобы создать 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
Таким образом, вы успешно создали новый столбец с объединёнными значениями из двух других колонок.
Фильтрация DataFrame pandas по критериям подстроки
Как выбрать строки из DataFrame на основе значений столбцов?
Создание DataFrame в Pandas путём последовательного добавления строк
Преобразование списка словарей в DataFrame pandas
Получение списка из заголовков столбцов DataFrame в Pandas