I have a Pandas dataframe in Python. The contents of the dataframe are from here. I modified the case of the first alphabet in the "Single" column slightly. Here is what I have:
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   I would like to sort by the Single column in ascending order (a to z). When I run
df.sort_values(by='Single',inplace=True)   it seems that the sort is not able to combine upper and lowercase. Here is what I get:
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   So, it is sorting by uppercase first and then performing a separate sort by lower case. I want a combined sort, regardless of the case of the starting alphabet in the Single column. The row with "bohemian Rhapsody" is in the wrong location after sorting. It should be first; instead it is appearing as the 5th row after the sort.
Is there a way to do sort a Pandas DataFrame while ignoring the case of the text in the Single column?
str. contains has a case parameter that is True by default. Set it to False to do a case insensitive match. Show activity on this post.
You can use the following syntax to exclude columns in a pandas DataFrame: #exclude column1 df. loc[:, df. columns!='
To sort the DataFrame based on the values in a single column, you'll use . sort_values() . By default, this will return a new DataFrame sorted in ascending order.
To group Pandas dataframe, we use groupby(). To sort grouped dataframe in descending order, use sort_values(). The size() method is used to get the dataframe size.
You can convert all strings to upper/lower case and then call argsort() which gives the index value to reorder the data frame by Single ignoring the case:
df.iloc[df.Single.str.lower().argsort()]   
Pandas 1.1.0 introduced the key argument as a more intuitive way to achieve this:
df.sort_values(by='Single', inplace=True, key=lambda col: col.str.lower()) 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With