2017-01-15 3 views
3

У меня есть кадр данных Pandas в Python. Содержимое фрейма данных составляет от here. Я немного изменил случай первого алфавита в столбце «Один». Вот что у меня есть:Pandas DataFrame сортировать игнорируя случай

import pandas as pd 
df = pd.read_csv('test.csv') 
print df 

Position      Artist     Single    Year  Weeks 
     1    Frankie Laine    I Believe    1953 18 weeks 
     2     Bryan Adams   I Do It for You    1991 16 weeks 
     3     Wet Wet Wet  love Is All Around    1994 15 weeks 
     4 Drake (feat. Wizkid & Kyla)    One Dance    2016 15 weeks 
     5      Queen  bohemian Rhapsody 1975/76 & 1991/92 14 weeks 
     6     Slim Whitman    Rose Marie    1955 11 weeks 
     7    Whitney Houston i Will Always Love You    1992 10 weeks 

Я хотел бы сортировать по Single столбца в порядке возрастания (от а до г). Когда я запускаю

df.sort_values(by='Single',inplace=True) 

кажется, что сортировка не способна сочетать верхний и нижний регистр. Вот что я получаю:

Position      Artist     Single    Year  Weeks 
     1    Frankie Laine    I Believe    1953 18 weeks 
     2     Bryan Adams   I Do It for You    1991 16 weeks 
     4 Drake (feat. Wizkid & Kyla)    One Dance    2016 15 weeks 
     6     Slim Whitman    Rose Marie    1955 11 weeks 
     5      Queen  bohemian Rhapsody 1975/76 & 1991/92 14 weeks 
     7    Whitney Houston i Will Always Love You    1992 10 weeks 
     3     Wet Wet Wet  love Is All Around    1994 15 weeks 

Таким образом, сортировка по прописные первым, а затем выполняет отдельный вид нижней обоймой. Я хочу комбинированный сорт, независимо от того, какой исходный алфавит находится в столбце Single. После сортировки строка с «богемной рапсодией» находится в неправильном месте. Это должно быть первым; вместо этого он появляется как 5-я строка после сортировки.

Есть ли способ сделать Pandas DataFrame, игнорируя случай текста в Отдельный столбец?

ответ

4

Вы можете преобразовать все строки в верхний/нижний а затем позвоните по телефону argsort(), который дает значение индекса для изменения порядка кадров данных на . Одиночный, игнорирующий случай:

df.iloc[df.Single.str.lower().argsort()] 

enter image description here

+0

Отлично! Благодарю. Только то, что я хотел. –

1

Создать копию Single во всех заглавных букв и сортировки по этому столбцу:

df["Single.Upper"] = df["Single"].str.upper() 
df.sort_values(by="Single.Upper", inplace=True) 

Вы можете удалить столбец позже:

del df["Single.Upper"] 
+0

Спасибо. Я думал об этом, но не хотел создавать новый столбец. Я безуспешно пытался использовать 'by = df [" Single "]. Str.upper()'. Есть ли способ сделать это, не создавая и не удаляя лишний столбец? –

+0

Да. См. Ответ Псидома. – DyZ

+0

О, да, я видел ответ. Мне было интересно, можно ли выполнить преобразование в верхний регистр (например, вы сделали) без создания + удаления дополнительного столбца. –

Смежные вопросы