gpt4 book ai didi

python - Pandas DataFrame 按分类列排序,但按特定类排序

转载 作者:行者123 更新时间:2023-12-03 07:09:56 34 4
gpt4 key购买 nike

我想使用 df_selected = df_targets.head(N) 根据特定列的条目选择 Pandas 数据框中的顶部条目。

每个条目都有一个目标值(按重要性顺序):

Likely Supporter, GOTV, Persuasion, Persuasion+GOTV  

不幸的是,如果我这样做

df_targets = df_targets.sort("target")

排序将按字母顺序(GOTV可能的支持者、...)。

我希望有一个像 list_ordering 这样的关键字:

my_list = ["Likely Supporter", "GOTV", "Persuasion", "Persuasion+GOTV"] 
df_targets = df_targets.sort("target", list_ordering=my_list)

为了解决这个问题,我创建了一个字典:

dict_targets = OrderedDict()
dict_targets["Likely Supporter"] = "0 Likely Supporter"
dict_targets["GOTV"] = "1 GOTV"
dict_targets["Persuasion"] = "2 Persuasion"
dict_targets["Persuasion+GOTV"] = "3 Persuasion+GOTV"

,但这似乎是一种非Pythonic的方法。

建议将不胜感激!

最佳答案

我认为你需要Categorical使用参数 ordered=True 然后按 sort_values 排序效果非常好:

检查 Categorical 的文档:

Ordered Categoricals can be sorted according to the custom order of the categories and can have a min and max value.

import pandas as pd

df = pd.DataFrame({'a': ['GOTV', 'Persuasion', 'Likely Supporter',
'GOTV', 'Persuasion', 'Persuasion+GOTV']})

df.a = pd.Categorical(df.a,
categories=["Likely Supporter","GOTV","Persuasion","Persuasion+GOTV"],
ordered=True)

print (df)
a
0 GOTV
1 Persuasion
2 Likely Supporter
3 GOTV
4 Persuasion
5 Persuasion+GOTV

print (df.a)
0 GOTV
1 Persuasion
2 Likely Supporter
3 GOTV
4 Persuasion
5 Persuasion+GOTV
Name: a, dtype: category
Categories (4, object): [Likely Supporter < GOTV < Persuasion < Persuasion+GOTV]
df.sort_values('a', inplace=True)
print (df)
a
2 Likely Supporter
0 GOTV
3 GOTV
1 Persuasion
4 Persuasion
5 Persuasion+GOTV

关于python - Pandas DataFrame 按分类列排序,但按特定类排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39223256/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com