#python #pandas
Вопрос:
У меня есть фрейм данных Pandas, подобный следующему
col_a col_b col_c
2021-05-01 1 30
2021-05-01 3 40
2021-05-01 2 60
2021-05-02 1 70
2021-05-02 2 10
2021-05-02 3 20
И я хочу сделать это в следующем фрейме данных (т. Е. Добавить n
новые столбцы на основе количества различных типов в col_b
столбце в исходном фрейме данных, а затем сопоставить их на основе col_a
для заполнения значений)
col_a type_1 type_2 type_3
2021-05-01 30 60 40
2021-05-02 70 10 20
Не могли бы вы мне помочь, пожалуйста?
Ответ №1:
Вы можете использовать pivot
:
df = df.pivot(*df).add_prefix('type_')
Для дальнейшего преобразования в требуемую структуру используйте:
df = df.pivot(*df).add_prefix('type_').rename_axis(None, axis= 1).reset_index()
OUTPUT
:
col_a type_1 type_2 type_3
0 2021-05-01 30 60 40
1 2021-05-02 70 10 20
Еще один set_index
/ unstack
вариант:
df = df.set_index(['col_a','col_b']).unstack().add_prefix('type_')
df.columns = df.columns.droplevel()
Ответ №2:
Вы можете использовать .pivot()
и затем .add_prefix()
для имен столбцов. Очистите имя оси столбца по .rename_axis()
и , наконец .reset_index()
, следующим образом:
df = (df.pivot(index='col_a', columns='col_b', values='col_c')
.add_prefix('type_')
.rename_axis(columns=None)
.reset_index()
)
Результат:
col_a type_1 type_2 type_3
0 2021-05-01 30 60 40
1 2021-05-02 70 10 20