Pandas: как объединить значения из нескольких столбцов в один
Вы можете использовать следующие методы для группировки значений из нескольких столбцов DataFrame pandas в один столбец:
Способ 1: объединить значения по порядку столбцов по умолчанию
df[' coalesce '] = df. bfill (axis= 1 ). iloc [:, 0]
Способ 2. Объединение значений с использованием определенного порядка столбцов
df[' coalesce '] = df[[' col3 ', ' col1 ', ' col2 ']]. bfill (axis= 1 ). iloc [:, 0]
В следующих примерах показано, как использовать каждый метод на практике со следующим DataFrame pandas:
import pandas as pd import numpy as np #createDataFrame 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
Вот логика, которая использовалась для принятия решения о том, какое значение поместить в столбец слияния :
- Если значение во вспомогательном столбце не равно нулю, используйте это значение.
- В противном случае, если значение в столбце отказов не равно нулю, используйте это значение.
- В противном случае, если значение в столбце точек не равно нулю, используйте это значение.
Примечание . Полную документацию по функции bfill() можно найти здесь .
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:
Как объединить два столбца в Pandas
Как суммировать определенные столбцы в Pandas
Как сортировать по нескольким столбцам в Pandas