【问题标题】:python dataframe sequencingpython数据帧排序
【发布时间】:2021-01-05 20:32:48
【问题描述】:

样本[:]

                                     rating
gender                                    F         M
title
$1,000,000 Duck (1971)             3.375000  2.761905
'Night Mother (1986)               3.388889  3.352941
'Til There Was You (1997)          2.675676  2.733333
'burbs, The (1989)                 2.793478  2.962085
...And Justice for All (1979)      3.828571  3.689024
1-900 (1994)                       2.000000  3.000000
10 Things I Hate About You (1999)  3.646552  3.311966
101 Dalmatians (1961)              3.791444  3.500000
101 Dalmatians (1996)              3.240000  2.911215
12 Angry Men (1957)                4.184397  4.328421

sample.info()

<class 'pandas.core.frame.DataFrame'>
Index: 10 entries, $1,000,000 Duck (1971) to 12 Angry Men (1957)
Data columns (total 2 columns):
 #   Column       Non-Null Count  Dtype
---  ------       --------------  -----
 0   (rating, F)  10 non-null     float64
 1   (rating, M)  10 non-null     float64
dtypes: float64(2)

我正在尝试使用 sample.sort_index 或 sample.sort_values 对“F”列进行排序,但我无法使任何一个工作。有没有办法只对“F”列进行排序?

我试过了:

sample.sort_index(columns='F', ascending=False)
sample.sort_values(columns='F', ascending=False)
sample.sort_index(by='F', ascending=False)
sample.sort_values(by='F', ascending=False)

以上所有带有“F”的内容都替换为“rating,F”。 显然我不明白如何对数据框进行排序。

【问题讨论】:

标签: python pandas dataframe


【解决方案1】:

您的专栏似乎有一个 MultiIndex。你的第一级有一个单一的“评级”值,你的第二级有你的值[“F”,“M”]。无论排序如何,为了访问 MultiIndex 中的特定列,您需要使用元组选择列,首先选择“评级”列集,然后选择“M”或“F”。

对于您当前的数据,这应该可以:

df.sort_values(by=("rating", "F"), ascending=False)

                                     rating          
gender                                    F         M
title                                                
12 Angry Men (1957)                4.184397  4.328421
...And Justice for All (1979)      3.828571  3.689024
101 Dalmatians (1961)              3.791444  3.500000
10 Things I Hate About You (1999)  3.646552  3.311966
'Night Mother (1986)               3.388889  3.352941
$1,000,000 Duck (1971)             3.375000  2.761905
101 Dalmatians (1996)              3.240000  2.911215
'burbs, The (1989)                 2.793478  2.962085
'Til There Was You (1997)          2.675676  2.733333
1-900 (1994)                       2.000000  3.000000

使用元组(而不是列表)意味着我想按单列(“评级”、“F”)排序。这与使用列表 ["rating", "F"] 进行数据帧操作时非常不同。使用列表声明您有 2 个单独的列,分别名为“rating”和“F”,并且您想同时选择它们。

如果 MultiIndex 的内容令人困惑 - 确实是这样,尤其是如果您是 pandas 的新手。您可以将数据修复为不使用 MultiIndex 列,如下所示:

df = df["rating"]

# Once we get rid of the unnecessary first level of our multiindex
#  you can actually sort your Dataframe the way you originally thought you could
df.sort_values(by='F', ascending=False)

gender                                    F         M
title                                                
12 Angry Men (1957)                4.184397  4.328421
...And Justice for All (1979)      3.828571  3.689024
101 Dalmatians (1961)              3.791444  3.500000
10 Things I Hate About You (1999)  3.646552  3.311966
'Night Mother (1986)               3.388889  3.352941
$1,000,000 Duck (1971)             3.375000  2.761905
101 Dalmatians (1996)              3.240000  2.911215
'burbs, The (1989)                 2.793478  2.962085
'Til There Was You (1997)          2.675676  2.733333
1-900 (1994)                       2.000000  3.000000

注意“评分”不再出现在数据框的顶部,因为我们已经用df = df["rating"] 选择了它

【讨论】:

    猜你喜欢
    • 2020-06-03
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 2021-12-15
    • 2023-01-14
    • 2017-06-30
    相关资源
    最近更新 更多