sort df, но исключить первые 2 столбца из sort - PullRequest
1 голос
/ 23 февраля 2020

Я хочу отсортировать df, но я хочу исключить первые 2 столбца из сортировки.

Я могу успешно отсортировать, исключая первый 1 столбец, но я хочу обновить приведенный ниже код, чтобы исключить первые 2 столбца.

from pandas import DataFrame
Cars = {'Dimensions': [0.48,0.44,0.4,0.6],
        'Price': [0.3,0.25,0.74,0.5],
        'Year': [0.41,0.38,0.64,0.65],
        'Range': [0.95,0.98,0.24,0.42],
        'Height': [0.75,0.88,0.84,0.95],
        }

df = DataFrame(Cars, columns= ['Dimensions', 'Price','Year', 'Range', 'Height'], 
               index=['Honda Civic','Toyota Corolla','Ford Focus','Audi A4'])

s = df.iloc[0]
df = df.iloc[:, ((-s[1:]).argsort() + 1).reindex(df.columns, fill_value=0)]

Я думал, что это будет работать, но это не

s = df.iloc[0:1]
df = df.iloc[:, ((-s[1:]).argsort() + 1).reindex(df.columns, fill_value=0)]

ошибка:

AttributeError: 'DataFrame' object has no attribute 'argsort'

Ожидаемый вывод:

                Dimensions  Price  Range  Height  Year  
Honda Civic           0.48   0.30   0.95    0.75  0.41  
Toyota Corolla        0.44   0.25   0.98    0.88  0.38 
Ford Focus            0.40   0.74   0.24    0.84  0.64  
Audi A4               0.60   0.50   0.42    0.95  0.65 

1 Ответ

1 голос
/ 23 февраля 2020

Проблема вместо этого Series Индексирование возвращает одну строку DataFrame, и поскольку argsort реализовано, но только для Series возникает ошибка:

s = df.iloc[0:1]
print (s)
             Dimensions  Price  Year  Range  Height
Honda Civic        0.48    0.3  0.41   0.95    0.75

Для исключения первых 2 столбцов добавьте помощник Series для первых 2 столбцов, заполненных 0,1, а также добавьте s[2:] для пропуска первых двух значений индекса:

s = df.iloc[0]

new = pd.Series([0,1], index=df.columns[:2])
df = df.iloc[:, new.append( ((-s[2:]).argsort() + 2))]
print (df)
                Dimensions  Price  Range  Height  Year
Honda Civic           0.48   0.30   0.95    0.75  0.41
Toyota Corolla        0.44   0.25   0.98    0.88  0.38
Ford Focus            0.40   0.74   0.24    0.84  0.64
Audi A4               0.60   0.50   0.42    0.95  0.65
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...