2017-11-28 12 views
0

、のは、それがweather1呼びましょうは:再注文データフレームデータフレームの場合

 Temp 
Month 
Apr  61 
Jan  32 
Jul  69 
Oct  43 

私は、実際のカレンダー月の順序に基づいて月を並べ替えるのが好きではなく、アルファベット順です。

私は、次の操作を行うことができます

ordered= ['Jan','Apr','Jul','Oct'] 
df.reindex(ordered) 

私はおそらく「日付部分」機能を使って、これを行うために、より動的な方法を探していますが。

ありがとうございます。

+0

あなたがこの回答を参照することができhttps://stackoverflow.com/a/39078261/4662041 – Sheshnath

+0

@Sheshnath私はどのように把握することはできていないようですこの例を使用して、インデックスに日付から%bだけを持つ、私のものに適用します。また、 'Index'オブジェクトに 'strftime'属性がないというエラーが表示される – user8834780

答えて

1

MCVEを作るためにあなたのデータをフォーマットした:

import pandas as pd 
data = { 
    'smonth': ['Apr', 'Jan', 'Jul', 'Oct'] 
    ,'temp': [61, 32, 69, 43] 
} 
df = pd.DataFrame(data) 

我々は、次のデータフレームがあります。

smonth temp 
0 Apr 61 
1 Jan 32 
2 Jul 69 
3 Oct 43 

今、私たちはあなたの文字列の月は(listを参照してください、%bフォーマッタを使用して)に変換し、カラム日付に、次にインデックスに移動し、最終的にMonthフィールドを抽出します。

df['month'] = pd.DatetimeIndex(pd.to_datetime(df['smonth'], format='%b')).month 

そして、ソートインデックスを再作成して:

df = df.set_index('month').sort_index() 

それが行われます。

 smonth temp 
month    
1  Jan 32 
4  Apr 61 
7  Jul 69 
10  Oct 43 

更新

私は明示的に使用して、あなたの入力を再現する場合:次に

df2 = pd.DataFrame(
    data['temp'] 
    ,index=pd.Index(data['smonth'], name='Month') 
    ,columns=['Temp'] 
) 

それ減少する:

df2.index = pd.to_datetime(df2.index, format='%b').month 
df2.sort_index(inplace=True) 

とリターン:

 Temp 
Month  
1  32 
4  61 
7  69 
10  43