Преобразовать датафрейм Pandas в датафрейм с сортированными значениями
Пытаюсь написать функцию, которая преобразует датафрейм с отсортированными значениями по строкам, в котором названия столбцов становятся значениями соседней со значением колонки
import pandas as pd
inp = [{'name':'ab', 'A':1, 'B':2,'С':3}, {'name':'cd','A':3, 'B':4,'С':5},
{'name':'ef','A':5, 'B':7,'С':6}]
df = pd.DataFrame(inp)
print(df)
name A B С
0 ab 1 2 3
1 cd 3 4 5
2 ef 5 7 6
name A B С
0 ab С 3 B 2 А 1
1 cd C 5 B 4 A 3
2 ef B 7 C 6 A 5
Пока только получилось создать функцию, которая выводит серию из значений колонки, которую подаем на вход, но почему то не сортирует:
sorted_df = pd.DataFrame(columns = ['№1', '№2'])
def recom(c):
list = [] #создаем пустой список
for i in df.columns: #проходим циклом по колонкам
if i[0] == c: # если первая колонка = переменной, которую мы подаем на вход функции
list.append((i, df[i]))
sorted_list = sorted(list, key=lambda x: x[1], reverse=True)#сортируем список в порядк убывания по количеству
return sorted_list
Out:
[('A',
0 1
1 3
2 5
Name: A, dtype: int64)]
Ответы (1 шт):
Никогда не называйте переменные ключевыми словами языка, например list, потом могут быть загадочные ошибки на ровном месте.
Внимательно посмотрите на список, который вы сортируете:
[('A',
0 1
1 3
2 5
Name: A, dtype: int64)]
Это список из одного элемента, поэтому там нечего сортировать. Единственный элемент списка - кортеж из двух элементов:
('A',
0 1
1 3
2 5
Name: A, dtype: int64)
Первый элемент кортежа - строка 'A'.
Второй элемент кортежа - это pandas series с индексами 0, 1, 2 и значениями 1, 3, 5.
Что вы хотите добиться при этом я не очень понимаю, поэтому пока просто указываю вам, что нужно разобраться, что вы вообще делаете, пока цель не очень понятна.