Сортировать pandas DataFrame с функцией по значениям столбцов
на основе python, сортировка по убыванию фрейма данных с пандами:
дано:
from pandas import DataFrame
import pandas as pd
d = {'one':[2,3,1,4,5],
'two':[5,4,3,2,1],
'letter':['a','a','b','b','c']}
df = DataFrame(d)
df тогда выглядит так:
df:
letter one two
0 a 2 5
1 a 3 4
2 b 1 3
3 b 4 2
4 c 5 1
Я хотел бы иметь что-то вроде:
f = lambda x,y: x**2 + y**2
test = df.sort(f('one', 'two'))
это должно упорядочить полный фрейм данных относительно суммы квадратов значений столбцов "один" и " два " и дать мне:
test:
letter one two
2 b 1 3
3 b 4 2
1 a 3 4
4 c 5 1
0 a 2 5
восходящий или нисходящий порядок не имеет значения. Есть хороший и простой способ сделать это? Я пока не удалось найти решение.
3 ответов
вы можете создать временный столбец для использования в сортировке, а затем бросить его:
df.assign(f = df['one']**2 + df['two']**2).sort_values('f').drop('f', axis=1)
Out:
letter one two
2 b 1 3
3 b 4 2
1 a 3 4
4 c 5 1
0 a 2 5
from pandas import DataFrame
import pandas as pd
d = {'one':[2,3,1,4,5],
'two':[5,4,3,2,1],
'letter':['a','a','b','b','c']}
df = pd.DataFrame(d)
#f = lambda x,y: x**2 + y**2
array = []
for i in range(5):
array.append(df.ix[i,1]**2 + df.ix[i,2]**2)
array = pd.DataFrame(array, columns = ['Sum of Squares'])
test = pd.concat([df,array],axis = 1, join = 'inner')
test = test.sort_index(by = "Sum of Squares", ascending = True).drop('Sum of Squares',axis =1)
просто понял, что ты хотел этого:
letter one two
2 b 1 3
3 b 4 2
1 a 3 4
4 c 5 1
0 a 2 5
вы пытались создать новый столбец, а затем отсортировать его. Я не могу прокомментировать исходное сообщение, поэтому я просто публикую свое решение.
df['c'] = df.a**2 + df.b**2
df = df.sort_values('c')