Как соединить в один два столбца dataframe pandas "расческой"?
Например, есть такой тестовый датафрейм:
df = pd.DataFrame({'Name':['Ivan', 'Vasya', 'Kolya'], 'A_1':['02', '03', '01'], 'A_2':['02', '07', '11']})
Исходный вид:
Name A_1 A_2
Ivan 02 02
Vasya 03 07
Kolya 01 11
Конечный вид:
Name A
Ivan 02
Ivan 02
Vasya 03
Vasya 07
Kolya 01
Kolya 11
Буду очень благодарна за помощь
UPD:
Исправила про Колю, как заметил @inquirer в комментарии. И поняла, что слишком упростила задачу в примере — на самом деле колонок больше, чем две, например, так:
df = pd.DataFrame({'Name':['Ivan', 'Vasya', 'Kolya'],
'Age':['50', '20', '45'],
'A_1':['02', '03', '01'],
'A_2':['02', '07', '11'],
'B_1':['07', '15', '08'],
'B_2':['35', '15', '12'],
'C_1':['02', '07', '13'],
'C_2':['05', '06', '13']})
То есть вот исходные данные:
Name Age A_1 A_2 B_1 B_2 C_1 C_2
Ivan 50 02 02 07 35 02 05
Vasya 20 03 07 15 15 07 06
Kolya 45 01 11 08 12 13 13
А вот итоговые:
Name Age A B C
Ivan 50 02 07 02
Ivan 50 02 35 05
Vasya 20 03 15 07
Vasya 20 07 15 06
Kolya 45 01 08 13
Kolya 45 11 12 13
Ответы (3 шт):
Автор решения: RAINGM
→ Ссылка
import pandas as pd
df1 = pd.DataFrame({'id': ['A01', 'A02', 'A03', 'A04'],
'Name': ['ABC', 'PQR', 'DEF', 'GHI']})
df2 = pd.DataFrame({'id': ['B05', 'B06', 'B07', 'B08'],
'Name': ['XYZ', 'TUV', 'MNO', 'JKL']})
frames = [df1, df2]
result = pd.concat(frames)
result
Автор решения: CrazyElf
→ Ссылка
Наверняка можно как-то проще и у меня порядок строк другой получается, но сами данные какие нужно:
pd.DataFrame({
'Name': df['Name'].to_list() * 2,
'A': df['A_1'].to_list() + df['A_2'].to_list()
})
Вывод:
Name A
0 Ivan 02
1 Vasya 03
2 Kolya 01
3 Ivan 02
4 Vasya 07
5 Kolya 11
Автор решения: inquirer
→ Ссылка
df = pd.DataFrame({'Name':['Ivan', 'Vasya', 'Kolya'], 'A_1':['02', '03', '01'], 'A_2':['02', '07', '11']})
f = pd.Series(df['A_1'].values, index= df['Name'].values)
a = pd.Series(df['A_2'].values, index= df['Name'].values)
b = pd.concat([f, a], axis=0)
print(b.sort_index())#сортировка по имени
"""
Ivan 02
Ivan 02
Kolya 01
Kolya 11
Vasya 03
Vasya 07
"""
print(b.sort_values())#сортировка по значениям
"""
Kolya 01
Ivan 02
Ivan 02
Vasya 03
Vasya 07
Kolya 11
"""
Не при сортировке идет сначала Коля, а нужно, чтобы Вася(так в распечатке). Если правильно понимаю? Уточните нужна сортировка или сначала в списке Вася, а потом Коля?