2017-07-04 2 views
0

sort_indexの動作が変更されたようです。私は日付でソートしたいのですが、0.20に更新してから、それを月の日でソートしています。私はlist of changesを見ましたが、同じ結果を回復することはできませんでした。任意のヒント?パンダで変更されたsort_indexの動作0.20

おかげ

Gist - Pandas 0.19.2

Gist - Pandas 0.20.2

+0

一見したところ、APIが[0.19.2](http://pandas.pydata.org/pandas-docs/version/0.19.2/generated/pandas.DataFrame.sort_index .html) 〜[0.20.2](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_index.html)。それぞれのバージョンで 'df2.columns.get_level_values(0).dtype'をチェックしてみてください。私は 'dtype = 'O''(ピリオドではなく)を0.20にしています。 –

+0

日時/月 - 日/月形式で間隔を返すようにdatetimeオブジェクトを文字列形式に変換するためです。あなたのコメントは、私が実際にその変換を行うことができることを実感しました。 – poeticcapybara

答えて

2

@Bradソロモンからのコメントは、私は、私は、ソート後たかった文字列形式に変換することができ実感しました。文字列のソートの振る舞いは変わりませんが、今度は同じ動作が得られます。

代わりの

colnames = ['Date', 'Client', 'Value', 'OtherValue'] 
df = pd.DataFrame(data={c:v for c,v in zip(colnames, [col1,col2,col3,col4])}) 
df2 = df.groupby(['Client',pd.to_datetime(df['Date']).dt.to_period('W-THU')]).sum().unstack(level=1).fillna(0) 
new_cols = [i.start_time.strftime('%d/%m')+ 
      '-'+i.end_time.strftime('%d/%m') 
      for i in df2.columns.levels[1]] 
df2.columns.set_levels(new_cols,level=1,inplace=True) 
df2.columns = df2.columns.swaplevel(0,1) 
df2.sort_index(level=0, axis=1, inplace=True) 

colnames = ['Date', 'Client', 'Value', 'OtherValue'] 
df = pd.DataFrame(data={c:v for c,v in zip(colnames, [col1,col2,col3,col4])}) 
df2 = df.groupby(['Client',pd.to_datetime(df['Date']).dt.to_period('W-THU')]).sum().unstack(level=1).fillna(0) 
df2.columns = df2.columns.swaplevel(0,1) 
df2.sort_index(level=0, axis=1, inplace=True) 
new_cols = [i.start_time.strftime('%d/%m')+ 
      '-'+i.end_time.strftime('%d/%m') 
      for i in df2.columns.levels[0]] 
df2.columns.set_levels(new_cols,level=0,inplace=True) 
を書いて、それを解決します。

関連する問題