我在Python中有一个Pandas数据帧。数据框的内容来自here。我略微修改了“单一”列中第一个字母的大小写。这就是我所拥有的:
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 列按升序排序(a到z)。我跑的时候
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
因此,它首先按大写排序,然后按小写单独排序。我想要一个组合排序,无论单个列中的起始字母表是什么情况。排序后,带有“波希米亚狂想曲”的行位于错误的位置。应该是第一个;相反,它出现在排序后的第5行。
有没有办法对Pandas DataFrame进行排序,同时忽略 Single 列中文本的大小写?
答案 0 :(得分:9)
答案 1 :(得分:6)
熊猫1.1.0 introduced the key
argument是实现这一目标的更直观的方法:
df.sort_values(by='Single', inplace=True, key=lambda col: col.str.lower())
答案 2 :(得分:2)
以所有大写字母创建Single
的副本,并按该列排序:
df["Single.Upper"] = df["Single"].str.upper()
df.sort_values(by="Single.Upper", inplace=True)
您可以稍后删除该列:
del df["Single.Upper"]
答案 3 :(得分:0)
创建新列,在排序时使用它,然后删除。
df["Single.Lower"] = df["Name"].str.lower()
df.sort_values(['Single.Lower'], axis=0, ascending=True, inplace=True)
del df["Single.Lower"]