Pandas: как объединить значения из нескольких столбцов в один


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

Метод 1: объединение значений по порядку столбцов по умолчанию

df['coalesce'] = df.bfill (axis= 1 ). iloc [:, 0]

Метод 2: объединение значений с использованием определенного порядка столбцов

df['coalesce'] = df[['col3', 'col1', 'col2']]. bfill (axis= 1 ). iloc [:, 0]

В следующих примерах показано, как использовать каждый метод на практике со следующими пандами DataFrame:

import pandas as pd
import numpy as np

#create DataFrame
df = pd.DataFrame({'points': [np.nan, np.nan, 19, np.nan, 14],
 'assists': [np.nan, 7, 7, 9, np.nan],
 'rebounds': [3, 4, np.nan, np.nan, 6]})

#view DataFrame
print(df)

 points assists rebounds
0 NaN NaN 3.0
1 NaN 7.0 4.0
2 19.0 7.0 NaN
3 NaN 9.0 NaN
4 14.0 NaN 6.0

Метод 1: объединение значений по порядку столбцов по умолчанию

В следующем коде показано, как объединить значения в столбцах очков, передач и подборов в один столбец, используя первое ненулевое значение в трех столбцах в качестве объединенного значения:

#create new column that contains first non-null value from three existing columns 
df['coalesce'] = df.bfill (axis= 1 ). iloc [:, 0]

#view updated DataFrame
print(df)

 points assists rebounds coalesce
0 NaN NaN 3.0 3.0
1 NaN 7.0 4.0 7.0
2 19.0 7.0 NaN 19.0
3 NaN 9.0 NaN 9.0
4 14.0 NaN 6.0 14.0

Вот как было выбрано значение в столбце объединения :

  • Первая строка: первое ненулевое значение было 3.0 .
  • Вторая строка: первое ненулевое значение было 7.0 .
  • Третья строка: первое ненулевое значение было 19.0 .
  • Четвертая строка: первое ненулевое значение было 9.0 .
  • Пятая строка: первое ненулевое значение было 14.0 .

Метод 2: объединение значений с использованием определенного порядка столбцов

В следующем коде показано, как объединить значения в трех столбцах путем анализа столбцов в следующем порядке: передачи, подборы, очки.

#coalesce values in specific column order
df['coalesce'] = df[['assists', 'rebounds', 'points']]. bfill (axis= 1 ). iloc [:, 0]

#view updated DataFrame
print(df)

 points assists rebounds coalesce
0 NaN NaN 3.0 3.0
1 NaN 7.0 4.0 7.0
2 19.0 7.0 NaN 7.0
3 NaN 9.0 NaN 9.0
4 14.0 NaN 6.0 6.0

Вот логика, которая использовалась, чтобы решить, какое значение поместить в столбец объединения :

  • Если значение в столбце Assets не равно нулю, используйте это значение.
  • В противном случае, если значение в столбце подборов не равно нулю, используйте это значение.
  • В противном случае, если значение в столбце точек не равно нулю, используйте это значение.

Примечание.Полную документацию по функции bfill() можно найти здесь .

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:

Как объединить два столбца в Pandas
Как суммировать определенные столбцы в Pandas
Как сортировать по нескольким столбцам в Pandas

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.