2016-08-30 20 views
2

df_selected = df_targets.head(N)を使用して、特定の列のエントリのPandasデータフレームベースのトップエントリを選択します。各エントリは、(重要度の順で)target値を持つPandas DataFrameはカテゴリ別の列で並べ替えますが、特定のクラスの並べ替えで並べ替えます

:私は

df_targets = df_targets.sort("target") 

をすれば

Likely Supporter, GOTV, Persuasion, Persuasion+GOTV 

は、残念ながら、順序が(GOTVLikely Supporter、...)アルファベット順になります。

私はのように list_orderingのようなキーワードを期待していた

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" 

が、それは非ニシキヘビのアプローチのように思える:この問題に対処するために

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

私は辞書を作成。

提案をいただければ幸いです!

+0

あなたが右OrderedDict' '意味ですか? –

+0

ドキュメントの[このパート](http://pandas.pydata.org/pandas-docs/stable/categorical.html#reordering)をお読みください。 – IanS

+0

はい、「OrderedDict」 – elzurdo

答えて

1

私はあなたがパラメータordered=TrueCategoricalが必要だと思うし、その後、非常に素晴らしいsort_values作品によってソート:私はこのスライスのソリューションを好き

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 
+0

ありがとうございます! (私は+1を与えましたが、私はニュービーですので、しばらくそれを見ないかもしれません...) 'pd.Categorical'に関する1つの質問です。 これははるかに大きなDataFrameの列でなければなりませんが、 'pd.Categorical'はSeriesではありません(インデックスを取得しません) ' pd.Series'でラップしてそこにインデックスを適用する唯一のオプションはありますか? – elzurdo

+0

私の答えが役に立ったら、[同意する](http://meta.stackexchange.com/a/5235/295067)を忘れないでください。ありがとう。 – jezrael

+0

インデックスが必要な場合は、 'Series'が必要だと思います。[カテゴリの詳細](http://pandas.pydata.org/pandas-docs/stable/categorical.html#object-creation)。 – jezrael

1

jerzraelの入力や参照のおかげで:

list_ordering = ["Likely Supporter","GOTV","Persuasion","Persuasion+GOTV"] 

df["target"] = df["target"].astype("category", categories=list_ordering, ordered=True) 
0

私の以前の回答に示されているメソッドは廃止されました。

代わりにを図のように使用することが最善ですhere。だから、

list_ordering = ["Likely Supporter","GOTV","Persuasion","Persuasion+GOTV"] 
df["target"] = pd.Categorical(df["target"], categories=list_ordering) 
関連する問題